Java 如何同步一组线程?

Java 如何同步一组线程?,java,multithreading,Java,Multithreading,我想创建一个同步方法,这样来自该类型线程类的所有对象一次只能访问一个函数 当我们看的时候,它说: 通过使用同步方法访问要协调访问的对象。这些方法是用synchronized关键字声明的。在给定的时间点上,只能为对象调用一个同步方法。这可以防止多个线程中的同步方法相互冲突 正如我所说,这不是我想要的,因为我希望能够对类进行互斥调用。要使类上的方法(而不是类的特定实例)同步,请编写: 或 使用静态锁: private final static Object lock = new Object();

我想创建一个同步方法,这样来自该类型线程类的所有对象一次只能访问一个函数

当我们看的时候,它说:

通过使用同步方法访问要协调访问的对象。这些方法是用synchronized关键字声明的。在给定的时间点上,只能为对象调用一个同步方法。这可以防止多个线程中的同步方法相互冲突


正如我所说,这不是我想要的,因为我希望能够对类进行互斥调用。

要使类上的方法(而不是类的特定实例)同步,请编写:

使用静态锁:

private final static Object lock = new Object();

public void foo() {
    synchronized(lock) {
        ...
    }
}

我想我会为后代提供更多的信息

我希望能够在课堂上进行互斥的通话

因此,这取决于您谈论的是类实例上的锁还是类的所有实例上的锁。在对象上同步时,如果其他线程锁定在同一对象实例上,则它们将阻塞

当实例方法是
同步的
时,如果您锁定
,则是同步的。以下内容相同:

  public void synchronized foo() {
     ...
  }
同:

  public void foo() {
     synchronized (this) {
        ...
     }
  }

通常,如@都铎提到的,应该考虑使用锁对象而不是制作方法<代码>同步< /代码>。这允许您锁定要保护的特定线路

任何同步的实例方法都将阻止对类的同一实例的其他调用。如果您想要阻止一个类的所有实例,那么您可以执行@JimN建议的操作并同步静态方法。正如他提到的,这与在类对象上同步是一样的:

public static synchronized ReturnType methodName() {
如果出于某种原因,您需要在所有对象之间锁定,那么我会将您的锁定包装在一个单例中,并使用.

Java1.3编写一些锁定/解锁方法?(无论哪种方式,该文档已经发布了一段时间。)您希望查看更新的资源;自黑暗时代以来,多线程技术已经有了很大的改进。也许是1.5版以来的一些东西。
  public void foo() {
     synchronized (this) {
        ...
     }
  }
public static synchronized ReturnType methodName() {