Я всегда думал, что синхронизация метода run в Java-классе, который реализует Runnable, является избыточной. Я пытаюсь выяснить, почему люди делают это:
public class ThreadedClass implements Runnable{
//other stuff
public synchronized void run(){
while(true)
//do some stuff in a thread
}
}
}
Это кажется излишним и ненужным, поскольку они получают блокировку объекта для другого потока.Или, скорее, они делают явным, что только один поток имеет доступ к методу 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. Есть идеи, почему или почему не следует синхронизировать метод прогона?