我一直认为在实现 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 方法。 任何想法为什么或为什么不应该同步 run 方法?
最佳答案
同步 Runnable
的 run(
) 方法是完全没有意义的除非你想共享 Runnable
在多个线程和中,您希望按顺序执行这些线程。这基本上是一个矛盾的术语。
理论上还有另一个更复杂的场景,您可能希望同步 run()
方法,这同样涉及在多个线程之间共享 Runnable
,但也使用 wait()
和 notify()
。我在 21 多年的 Java 中从未遇到过它。
关于java - 你应该同步运行方法吗?为什么或者为什么不?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/7313657/