前十几天和网友聊天的时候,他把 ThreadwiseSingleton 发给了我,我随后改写成泛型类。事实上,它基于 Threadslot 构建,因此达到了线程隔离的效果。您需要传入一个 Func(Of TResult) 完成初始化的工作。如果您的类中含有非托管资源,并无法预见可能的错误时,请使用一个 Try...Finally... 包裹将要运行的程序。同时感到抱歉的是,拖延了很久很久才发出来。
Imports System.Threading
'''
''' 一个线程隔离的 Singleton。
'''
Public Class ThreadwiseSingletonClass ThreadwiseSingleton(Of T As IDisposable)
Private Shared _Factory As Func(Of T)
'''
''' 获取构建此实例的工厂类。
'''
Public Shared Property Factory()Property Factory() As Func(Of T)
Get
Return _Factory
End Get
Set(ByVal value As Func(Of T))
_Factory = value
End Set
End Property
'''
''' 获得线程中的实例。
'''
Public Shared ReadOnly Property Instance()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
'''
''' 私有的构造函数。
'''
Private Sub New()Sub New()
End Sub
'''
''' 释放此 Singleton 实例使用的资源。请不要直接调用 Instance.Dispose()。
'''
Public Shared Sub Dispose()Sub Dispose()
Instance.Dispose()
'放空槽
Dim threadSlot As LocalDataStoreSlot = Thread.GetNamedDataSlot(GetType(T).ToString)
Thread.SetData(threadSlot, Nothing)
End Sub
End Class
【VisualBasic构建线程安全的Singleton】相关文章:
初二抒情哲理散文:我的父亲_1000字02-06
2010年咨询工程师《项目决策分析与评价》辅导练习题(5)02-06
哄孩子睡觉的童话故事大全02-06
小学生日记:我养成了坚持写日记的好习惯02-06
我梦想中的房子高考英语作文02-06
长笛基础学习大全02-06
上网利与弊的短文,300字左右_500字02-06
小学必会的Be动词的用法语法知识02-06
高考英语词汇: one another与one after another的区别02-06
游记的作文02-06
胜似亲人的作文300字02-06
以错误为话题的作文02-06
