私は以前にシングルトンを使用したことがないので、完全に間違った考えを持っているかもしれませんが、ポイントは一度しか初期化できず、それを呼び出す人は誰でも同じインスタンスを参照するということだと思いました..?
だから私は例からこれを取りました。GetInstance() は私のプログラムの何百もの異なる場所から呼び出され、デバッグすると、「Prog = New Program」という行がそれらの呼び出しのたびにヒットし続けます。私が考えたのは、まさに起こってはならないことでした..または、根本的な誤解がありますか?
' ********************** THREAD SAFE SINGLETON **************************
Public Class Program
Private Shared Prog As Program = Nothing
Private Shared ReadOnly singletonLock As New Object()
Public Shared Function GetInstance() As Program
SyncLock singletonLock
If Prog Is Nothing Then
Prog = New Program
End If
Return Prog
End SyncLock
End Function
編集:
「New」サブは、最初の呼び出しが完了する前に、Program.GetInstance への多数の呼び出しをトリガーするようです。これは、クラスがシングルトン化されてから共有されなくなった、このクラスに多くの共有パブリック オブジェクトが以前にあったためです。これらのオブジェクトは、初期化されると、他のオブジェクトを参照するために Program クラスを呼び出します。