我有一個關於一個代碼塊,我想了解Synchronze在方法調用Java
synchronized(Name.getname())
{
Name.getname().add(this);
}
是什麼的代碼塊同步上的問題嗎?它是否在方法調用結果或其他方面同步?
我有一個關於一個代碼塊,我想了解Synchronze在方法調用Java
synchronized(Name.getname())
{
Name.getname().add(this);
}
是什麼的代碼塊同步上的問題嗎?它是否在方法調用結果或其他方面同步?
是的,它是同步的。 您使用Name.getname()作爲鎖對象。 如果一個線程獲取Name.getname()對象,然後其他線程將等待,直到釋放對象
由getname()
在Name
實例返回的(參考)值(或靜態方法,如果它不是一個實例)被用作鎖定對象。
它對由Name.getname()
返回的對象進行同步。
就像System.out.println(Name.getname())
打印Name.getname()
返回的值。
無處不在你使用一個對象,可以使用一個Object類型的表達式。
我沒有添加任何其他答案中找不到的信息,但有時候圖片會有所幫助。
我猜Name.getName()
返回一個對單例名稱實例的引用。如果這是真的,那麼你的例子是相同的:
Name n = Name.getName();
synchronized(n) {
n.add(this);
}
這似乎很奇怪,我認爲所謂的「名」是一個單身,這似乎很奇怪,我認爲你將被允許添加this
到一些叫做「名字」的東西,但我根本無法理解你的例子,除非Name.getName()
總是返回相同的對象引用。
我懷疑是什麼讓我想起是什麼讓Name.getname()返回的對象被用作鎖對象。你能對此有更多的瞭解嗎?謝謝 – lboyel 2014-10-20 22:27:07
我不認爲任何人都可以闡明這一點。這裏的信息太少了。我甚至不知道「Name」對象是什麼或者做什麼,更不用說系統其他部分如何使用它。 – markspace 2014-10-20 22:41:11