2012-06-29 41 views
4

我看到一個Java示例,其主方法標記爲synchronized,調用另一個靜態同步方法。其效果是,基本上,只有在main方法返回後,另一個方法纔會在單獨的線程上運行。聲明主要方法同步

這樣的結構有什麼實用功能?

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)。如果每種主要方法都被認爲是一個子程序或外部程序,那麼混淆的程度就會降低很多。 –