你是否应该同步run方法?为什么或为什么不?
- 论坛
- 你是否应该同步run方法?为什么或为什么不?
15 浏览
你是否应该同步run方法?为什么或为什么不?
我一直认为,在实现了Runnable接口的Java类中,对run方法进行同步是多余的。我正在努力弄清楚为什么人们这样做:
public class ThreadedClass implements Runnable{ //其他内容 public synchronized void run(){ while(true) //在一个线程中做一些事情 } } }
这似乎是多余和不必要的,因为它们正在为另一个线程获取对象的锁。或者说,它们明确表示只有一个线程可以访问run()方法。但由于它是run方法本身,它不是它自己的线程吗?因此,只有它自己可以访问它自己,而不需要单独的锁定机制?
我在网上找到了一个建议,通过同步run方法,可以创建一个事实上的线程队列,例如通过以下方式实现:
public void createThreadQueue(){ ThreadedClass a = new ThreadedClass(); new Thread(a, "第一个").start(); new Thread(a, "第二个,在第一个上等待").start(); new Thread(a, "第三个,等待其他两个...").start(); }
个人而言,我永远不会这样做,但这引出了一个问题,为什么会有人同步run方法。有什么想法为什么或为什么不应该同步run方法?