2011-03-30 89 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 
     ... 
    } 
} 

虽然在大多数情况下,这表明你应该真正打破你的课堂。