我做了兩個靜態類試圖瞭解的SyncLock是如何工作的
NotInheritable Class gObject2
Public Shared TestSyncLock As String = "test"
End Class
NotInheritable Class gObject3
Public Shared TestSyncLock As String = "test"
End Class
然後我有兩個ASPX
Synclock1.aspx:
Public Class SyncLock1
Inherits System.Web.UI.Page
Protected Sub Page_Load(ByVal sender As Object, ByVal e As System.EventArgs) Handles Me.Load
SyncLock gObject2.TestSyncLock
Thread.Sleep(10000)
End SyncLock
End Sub
End Class
Synclock2.aspx
Public Class SyncLock2
Inherits System.Web.UI.Page
Protected Sub Page_Load(ByVal sender As Object, ByVal e As System.EventArgs) Handles Me.Load
SyncLock gObject3.TestSyncLock
SomeDiv.InnerHtml = "It works"
End SyncLock
End Sub
End Class
- 當我轉到synclock1.aspx時,它會旋轉10秒,並按預期顯示空白頁。
- 當我去synclock2.aspx它吐出
it works
一切已經很不錯了。
現在,當我去synclock1.apx然後在另一個瀏覽器中得到了synclock2.aspx,synclock2.aspx無法完成加載,直到synclock1.aspx完成。
這些是我用synclock鎖定的2個不同的對象,但它將它們視爲相同。爲什麼是這樣?
如果將其中一個字符串更改爲'test123',會發生什麼?也許'SyncLock'做了一個正常的比較而不是參考比較? –
@VisualVincent我認爲你的建議是完全基於離線的,但是當我將字符串從'test'改爲'test123'時,它工作正常。 – Henry
推測它在幕後使用了'Object.Equals',並且會測試'String'類型的值相等。我會建議專門爲鎖定而創建的對象應該只是鍵入'Object'。如果他們只是爲了鎖定而存在,那麼他們不應該有任何數據,因爲這些數據可能沒有用處。 – jmcilhinney