我做了两个静态类试图了解的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