是否应同步运行方法?为什么或为什么不呢?
我一直认为在实现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方法。任何想法为什么或为什么不应该同步运行方法?