其他同步方法的方法

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

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

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

看到这里 。

取决于您的具体需求。

有关更高级别的同步抽象,请参阅Java并发程序包 。 请注意,他们仍然可以使用下面的synchronized

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

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

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

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

顺便说一下, java.util.concurrent东西只能在Java5以后使用,不过有一个项目可以在http://backport-jsr166.sourceforge.net/上为Java 1.4反向移植包。

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

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

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

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

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