2014-10-20 95 views
0

我有一個關於一個代碼塊,我想了解Synchronze在方法調用Java

synchronized(Name.getname()) 
{ 
    Name.getname().add(this); 
} 

是什麼的代碼塊同步上的問題嗎?它是否在方法調用結果或其他方面同步?

回答

4

是的,它是同步的。 您使用Name.getname()作爲鎖對象。 如果一個線程獲取Name.getname()對象,然後其他線程將等待,直到釋放對象

1

getname()Name實例返回的(參考)值(或靜態方法,如果它不是一個實例)被用作鎖定對象。

2

它對由Name.getname()返回的對象進行同步。

就像System.out.println(Name.getname())打印Name.getname()返回的值。

無處不在你使用一個對象,可以使用一個Object類型的表達式。

+0

我懷疑是什麼讓我想起是什麼讓Name.getname()返回的對象被用作鎖對象。你能對此有更多的瞭解嗎?謝謝 – lboyel 2014-10-20 22:27:07

+0

我不認爲任何人都可以闡明這一點。這裏的信息太少了。我甚至不知道「Name」對象是什麼或者做什麼,更不用說系統其他部分如何使用它。 – markspace 2014-10-20 22:41:11

0

我沒有添加任何其他答案中找不到的信息,但有時候圖片會有所幫助。

我猜Name.getName()返回一個對單例名稱實例的引用。如果這是真的,那麼你的例子是相同的:

Name n = Name.getName(); 
synchronized(n) { 
    n.add(this); 
} 

這似乎很奇怪,我認爲所謂的「名」是一個單身,這似乎很奇怪,我認爲你將被允許添加this到一些叫做「名字」的東西,但我根本無法理解你的例子,除非Name.getName()總是返回相同的對象引用。