Если вы должны синхронизировать метод прогона? Почему или почему нет?

Я всегда думал, что синхронизация метода прогона в классе Java, который реализует Runnable, является избыточным. Я пытаюсь выяснить, почему люди делают это:

public class ThreadedClass implements Runnable{
    //other stuff
    public synchronized void run(){
        while(true)
             //do some stuff in a thread
        }
    }
}

кажется избыточным и ненужным, так как они получают блокировку объекта для другого потока. Кроме того, они делают явную, что только один нить имеет доступ к методу 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();
 }

Я бы никогда не сделал этого лично, но оно дает вопрос о том, почему кто-то синхронизирует метод прогона. Любые идеи, почему или почему не следует синхронизировать метод прогона?

34
задан MHP 14 September 2011 в 00:01
поделиться