2012-06-29 4 views
4

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

Какая практическая функциональность имела бы такая конструкция?

public class SynchronisedMain { 

    public static synchronized void main(String[] args) throws InterruptedException { 
     new Thread(new Runnable() { 
      @Override 
      public void run() { 
       thingy();    
      } 
     }).start(); 
     System.out.println("Kickstarted thingy thread."); 
     TimeUnit.MILLISECONDS.sleep(1000); 
    } 

    public static synchronized void thingy() { 
     System.out.println("Thingy!"); 
    } 
} 

ответ

3

Это, вероятно, полезно в качестве импровизированного «приложение закрыто обработчик», делает некоторые очистки долг перед приложение завершается полностью. Это довольно надуманно, хотя ...

+0

Конечно, надуманный. Если это было «действительно» необходимо, потяните этот метод в новый метод с другим именем. – tjg184

2

Нет ничего, что говорит о том, что основная функция может использоваться только как точка входа в программу. Будучи статичным, нет причин, по которым другие классы не могли позвонить SynchronisizedMain.main(). Синхронизация предотвращает одновременное выполнение нескольких экземпляров, что может быть желательно.

+0

Но будет ли это на практике? Это может запутаться, если в вашей программе будут вызваны различные основные методы ... –

+0

Обычно, если вы собираетесь это сделать, вы можете выставить основной метод таким образом, чтобы он не требовал повторной обработки параметров, которые вы передаете. то есть. WordCount.main (String [] args) будет WordCount.main (String fileName). Если каждый основной метод рассматривается как подпрограмма или внешняя программа, существует гораздо меньше путаницы. –

Смежные вопросы