2016-03-04 112 views
2

我有一個線程,我想要一直運行,直到JVM停止。什麼是最好的方式來做到這一點?如何讓線程一直存在直到JVM被殺死?

public void run() { 
    String event = sc.nextLine(); 
    try { 
      queue.put(event); // thread will block here 
    } catch (InterruptedException e) { 
      e.printStackTrace(); 
    } 
} 
+0

隨着循環。注意:把你的循環*放在你的'try'塊中,以便其他代碼可以中斷它。中斷是一個線程停止任何操作的請求。 – VGR

+1

爲了保持活力,請不要返回。然後它不會死亡,直到你的程序存在,或最後一個非守護線程存在。 –

回答

3

只是增加一個無限循環應該做的伎倆

public void run() { 
    while(true){ 
     String event = sc.nextLine(); 
     try { 
      queue.put(event); // thread will block here 
     } catch (InterruptedException e) { 
      e.printStackTrace(); 
     } 
    } 
} 
+0

請注意,由於這是寫入它將永遠循環,不要讓它自己被打斷,並保持JVM實例活着。您必須發出kill命令才能刪除該進程。 –

2
while (true) { runBody(); } 

添加異常,如果必要的處理。

1

除了while(true)循環,讓它作爲守護線程

從Oracle documentation頁:

public final void setDaemon(boolean on) 

將該線程標記爲守護線程或用戶線程。當只有運行的線程都是守護進程線程時,Java虛擬機纔會退出。 必須在線程啓動之前調用此方法

參數:

on - if true, marks this thread as a daemon thread 
+0

線程應該「運行直到JVM停止」,而不是「直到所有其他線程都死掉」。 – piegames