2013-02-06 61 views
2

噹噹前正在運行的線程退出時是否可以啓動新線程? 我爲框架編寫的代碼啓動一個線程,並鎖定(不是Java併發鎖定)文件。 我需要處理相同的文件,但我不能這樣做,因爲鎖由框架啓動的線程 保存。我的要求是啓動一個新的線程處理文件 一旦線程發起的線程完成Java - 在當前線程完成時啓動線程

謝謝, Senthil。

+0

[看文檔](http://docs.oracle.com/javase/7/docs/api/java/lang/Thread.html#join()) – akaIDIOT

+2

標題的答案是:「這是可能的,但爲什麼不循環?「。我對這個描述的回答是:「'synchronized'關鍵字是你想要的嗎?」 –

+0

不,我不能控制當前正在運行的線程。它鎖定了一些我也想處理的文件。不確定同步如何解決問題。你能更多地介紹嗎? – user330482

回答

0

你的基本代碼結構應該像他

public void run(){ 
//prepare 
synchronized{ 
//Access File 
} 
//non-trivial statements 
} 
+0

我的意思是不在任何java對象上。它鎖定文件系統中的一個文件。直到正在運行的線程完成後才能訪問該文件。因此,我現在想的就是鏈接一個新的線程,噹噹前正在運行的線程退出時開始。 – user330482

1

使用的Thread.join()方法
參考Example

參考documentation

+0

連接方法掛起當前正在運行的線程直到新線程完成,這不是我想要的。我想在當前正在運行的線程退出時啓動一個新線程 – user330482

+1

@ user330482爲什麼不能啓動兩個線程並在第一個線程中進行第二次連接? –

+0

第一個線程是由框架發起的,我沒有任何控制權。 :( – user330482

0

下面是在啓動第二個線程的例子另一個線程結束:

public class TwoThreads { 

    public static void main(String[] args) { 

     class SecondThread implements Runnable { 
      @Override 
      public void run() { 
       System.out.println("Start of second thread"); 

       try { 
        Thread.sleep(2000); 
       } catch (InterruptedException e) { } 

       System.out.println("End of second thread"); 
      } 
     } 

     class FirstThread implements Runnable { 
      @Override 
      public void run() { 
       System.out.println("Start of first thread"); 

       try { 
        Thread.sleep(1000); 
       } catch (InterruptedException e) { } 

       // Second thread gets launched here 
       new Thread(new SecondThread()).start(); 

       System.out.println("End of first thread"); 
      } 
     } 

     new Thread(new FirstThread()).start(); 
    } 
}