你是否应该同步run方法?为什么或为什么不?

15 浏览
0 Comments

你是否应该同步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方法?

0