MHP*_*MHP 34 java multithreading synchronization synchronized runnable
我一直认为在实现Runnable的java类中同步run方法是多余的.我试图找出人们为什么这样做:
public class ThreadedClass implements Runnable{
//other stuff
public synchronized void run(){
while(true)
//do some stuff in a thread
}
}
}
Run Code Online (Sandbox Code Playgroud)
它似乎是多余的和不必要的,因为它们正在为另一个线程获取对象的锁.或者更确切地说,他们明确表示只有一个线程可以访问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 Code Online (Sandbox Code Playgroud)
我个人永远不会这样做,但它提出了为什么有人会同步run方法的问题.任何想法为什么或为什么不应该同步run方法?
use*_*421 32
同步a的run(方法Runnable是完全没有意义的,除非您想要Runnable在多个线程之间共享并且您想要对这些线程的执行进行顺序化.这基本上是矛盾的.
理论上还有一个更复杂的场景,你可能希望同步该run()方法,这又涉及Runnable在多个线程之间共享,但也使用wait()和notify().我从未在21年多的Java中遇到过它.
| 归档时间: |
|
| 查看次数: |
38100 次 |
| 最近记录: |