线程安全的 Singleton - Visual Basic

简介: 大抵而言,Singleton 模式应该是设计模式中相当常用的一种了。它能够节省宝贵的 CPU 或内存资源,避免不必要的创建对象开销。然而,在多线程应用中,对于那些非线程安全的数据库组件,传统的 Singleton 将容易造成不稳定。
        大抵而言,Singleton 模式应该是设计模式中相当常用的一种了。它能够节省宝贵的 CPU 或内存资源,避免不必要的创建对象开销。然而,在多线程应用中,对于那些非线程安全的数据库组件,传统的 Singleton 将容易造成不稳定。如果使用 Synclock 进行同步,性能损耗可能将更大,特别在并发访问高的 ASP.net 应用中。
        前十几天和装配脑袋聊天的时候,他把 ThreadwiseSingleton 发给了我,我随后改写成泛型类。事实上,它基于 Threadslot 构建,因此达到了线程隔离的效果。您需要传入一个 Func(Of TResult) 完成初始化的工作。如果您的类中含有非托管资源,并无法预见可能的错误时,请使用一个 Try...Finally... 包裹将要运行的程序。同时感到抱歉的是,拖延了很久很久才发出来。

Imports  System.Threading

' '' <summary>
'
'' 一个线程隔离的 Singleton。
'
'' </summary>
Public  Class ThreadwiseSingleton(Of T As IDisposable)
    
Private Shared _Factory As Func(Of T)

    
''' <summary>
    ''' 获取构建此实例的工厂类。
    ''' </summary>
    Public Shared Property Factory() As Func(Of T)
        
Get
            
Return _Factory
        
End Get
        
Set(ByVal value As Func(Of T))
            _Factory 
= value
        
End Set
    
End Property

    
''' <summary>
    ''' 获得线程中的唯一实例。
    ''' </summary>
    Public Shared ReadOnly Property Instance() As T
        
Get
            
Dim threadSlot As LocalDataStoreSlot = Thread.GetNamedDataSlot(GetType(T).ToString)
            
Dim threadSlotObj As Object = Thread.GetData(threadSlot)

            
If threadSlotObj Is Nothing Then
                
'Create singleton instance 
                Dim ins As T = Factory.Invoke
                Thread.SetData(threadSlot, ins)
                
Return ins
            
Else
                
Return DirectCast(threadSlotObj, T)
            
End If
        
End Get
    
End Property


    
''' <summary>
    ''' 私有的构造函数。
    ''' </summary>
    Private Sub New()

    
End Sub

    
''' <summary>
    ''' 释放此 Singleton 实例使用的资源。请不要直接调用 Instance.Dispose()。
    ''' </summary>
    Public Shared Sub Dispose()
        Instance.Dispose()
        
'放空槽
        Dim threadSlot As LocalDataStoreSlot = Thread.GetNamedDataSlot(GetType(T).ToString)
        Thread.SetData(threadSlot, 
Nothing)
    
End Sub

End Class
目录
相关文章
|
安全 Java
线程安全的单例模式(Singleton)
线程安全的单例模式(Singleton)
157 4
|
设计模式 安全 Java
|
缓存 安全 Java
singleton模式四种线程安全的实现
1.描述:     Singleton(单例)是设计模式的一种,为了保证一个类仅有一个实例,并提供一个访问它的全局访问点。 2.主要特点:          1)单例类确保自己只有一个实例(构造函数私有:不被外部实例化,也不被继承)。
1175 0
|
设计模式
Singleton模式(一) - 简单多线程计数器
1. 经典的设计模式中的代码 public class Singleton    {        private static Singleton instance;   // 唯一实例        protected Singleton() { }   // 封闭客户程序的直接实例...
764 0
|
1月前
|
Java
如何在Java中进行多线程编程
Java多线程编程常用方式包括:继承Thread类、实现Runnable接口、Callable接口(可返回结果)及使用线程池。推荐线程池以提升性能,避免频繁创建线程。结合同步与通信机制,可有效管理并发任务。
139 6
|
4月前
|
Java API 微服务
为什么虚拟线程将改变Java并发编程?
为什么虚拟线程将改变Java并发编程?
296 83
|
26天前
|
Java 调度 数据库
Python threading模块:多线程编程的实战指南
本文深入讲解Python多线程编程,涵盖threading模块的核心用法:线程创建、生命周期、同步机制(锁、信号量、条件变量)、线程通信(队列)、守护线程与线程池应用。结合实战案例,如多线程下载器,帮助开发者提升程序并发性能,适用于I/O密集型任务处理。
199 0
|
2月前
|
算法 Java
Java多线程编程:实现线程间数据共享机制
以上就是Java中几种主要处理多线程序列化资源以及协调各自独立运行但需相互配合以完成任务threads 的技术手段与策略。正确应用上述技术将大大增强你程序稳定性与效率同时也降低bug出现率因此深刻理解每项技术背后理论至关重要.
203 16
|
6月前
|
机器学习/深度学习 消息中间件 存储
【高薪程序员必看】万字长文拆解Java并发编程!(9-2):并发工具-线程池
🌟 ​大家好,我是摘星!​ 🌟今天为大家带来的是并发编程中的强力并发工具-线程池,废话不多说让我们直接开始。
238 0

热门文章

最新文章