2016-03-04 29 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