其他同步方法的方法

时间:2011-03-30 07:00:52

标签: java synchronization

除了使用synchronized关键字之外,如何在java中同步方法?

6 个答案:

答案 0 :(得分:6)

您可以使用java.util.concurrent.locks包,尤其是Lock界面:

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

请参阅here

答案 1 :(得分:2)

取决于您的具体需求。

有关更高级别的同步抽象,请参阅Java concurrent package。请注意,他们仍然可以在...下面使用synchronized

答案 2 :(得分:1)

您可以使用java.util.concurrent.locks包中提供的Lock类

请参阅http://download.oracle.com/javase/1.5.0/docs/api/index.html?java/util/concurrent/locks/Lock.html

答案 3 :(得分:1)

这取决于你想要做什么。您是出于好奇还是有特定原因?

如果您正在尝试加速多线程方法,请尝试同步或锁定特定部分,或完全避免线程问题;制作共享数据final,制作静态(非共享)数据ThreadLocal,使用java.util.concurrent.atomic中的原子类型,使用并发集合(来自java.util.concurrent包)等。

顺便说一下,java.util.concurrent内容仅在Java5以后可用,但有一个项目在http://backport-jsr166.sourceforge.net/

为Java 1.4反向移植软件包

我推荐Brian Goetz撰写的“Java Concurrency in Practice”一书。

答案 4 :(得分:1)

您还可以使用@Synchronized中的Project Lombok生成一个私有字段,该字段将用作您方法的锁定。

答案 5 :(得分:0)

您可以在方法中使用synchronized块。如果您希望单独同步属于同一类的两个方法,这将非常有用。

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

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