2011-03-30 83 views
6

如何在java中同步除了使用synchronized關鍵字的方法?其他同步方法的方法

+6

你爲什麼要尋找另一種解決方案? – MeBigFatGuy 2011-03-30 07:03:09

+0

iam正在尋找替代品(其學習的一部分) – developer 2011-03-30 07:07:14

+0

當您將一個方法同步時,其鎖定的對象不是方法。 – 2011-03-30 08:18:25

回答

6

你可以使用java.util.concurrent.locks包,尤其是鎖接口:

Lock l = ...; 
l.lock(); 
try { 
    // access the resource protected by this lock 
} finally { 
    l.unlock(); 
} 

here

2

取決於你的具體需求。

請參閱Java concurrent package更高級別的同步抽象。請注意,他們仍然可以在下面使用​​...

1

這取決於您要做什麼。你是出於好奇還是有特定的原因?

如果您嘗試加速多線程方法,請嘗試同步或鎖定特定部分,或者完全避免線程問題;使共享數據final,使靜態的(非共享)數據ThreadLocal,從java.util.concurrent.atomic使用原子類型,使用併發集合(從java.util.concurrent包)等

順便說一句,在java.util.concurrent的東西只在Java5的可用起,儘管作爲一個項目來支持Java 1.4的軟件包http://backport-jsr166.sourceforge.net/

我推薦Brian Goetz編寫的「Java Concurrency in Practice」一書。

0

您可以在您的方法中使用同步塊。如果您希望兩個屬於同一個類的方法分開同步,這會很有用。

private Object guard = new ... 
public method(){ 
    synchronized(guard){ 
     \\method body 
     ... 
    } 
} 

雖然在大多數情況下,這表明你應該真正打破你的課堂。