我一直认为在实现 Runnable 的 java 类中同步 run 方法是多余的。 我想弄清楚为什么人们这样做:
public class ThreadedClass implements Runnable{
//other stuff
public synchronized void run(){
while(true)
//do some stuff in a thread
}
}
}
这似乎是多余和不必要的,因为他们正在为另一个线程获取对象的锁。或者更确切地说,他们明确表示只有一个线程可以访问 run() 方法。但是既然是run方法,它本身不就是自己的线程吗?因此,只有它可以访问自己而不需要单独的锁定机制?
我在网上发现了一个建议,通过同步 run 方法,您可能会创建一个实际的线程队列,例如通过这样做:
public void createThreadQueue(){
ThreadedClass a = new ThreadedClass();
new Thread(a, "First one").start();
new Thread(a, "Second one, waiting on the first one").start();
new Thread(a, "Third one, waiting on the other two...").start();
}
我个人永远不会这样做,但它引出了一个问题,即为什么有人会同步 run 方法。 任何想法为什么或为什么不应该同步运行方法?
原文由 MHP 发布,翻译遵循 CC BY-SA 4.0 许可协议
同步
run(
) 方法Runnable
是完全没有意义的 ,除非 你想共享Runnable
线程 之间 的顺序执行235 -这基本上是自相矛盾的。理论上还有另一个更复杂的场景,您可能想要同步
run()
方法,这再次涉及在多个线程之间共享Runnable
但也利用wait()
和notify()
。我在 21 多年的 Java 中从未遇到过它。