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