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