我有一个要求,我想创建一个包含5个线程的池,现在我想将这5个线程中的1个线程作为daemon
线程,当该特定的1个线程变为守护线程时,我想将一些任务分配给与任何服务相关的守护程序线程,这样当java程序退出时我可以在窗口任务管理器中检查特定的守护程序线程是否还在执行该任务。请告知如何实现该目的..!因为我被困在这个..!
下面是我的代码......
public class StoppingThread extends Thread //extend thread class
{
// public synchronized void run()
//synchronized (this)
private volatile boolean Completed = false;
public void setCompleted() {
Completed = true;
}
public void run()
{
for(int i=0;i<20 && !Completed;++i) {
System.out.println(Thread.currentThread().getName());
try {
Thread.sleep(500);
System.out.print(i +"\n"+ "..");
} catch(Exception e) {
e.printStackTrace();
}
}
}
public static void main(String... a)
{
StoppingThread x = new StoppingThread();
StoppingThread y = new StoppingThread();
x.start();
x.setName("first");
x.setCompleted(); // Will complete as soon as the latest iteration finishes means bolean variable value is set to true
y.start();
y.setName("second");
}
}
现在我想把Y线程作为守护程序线程,然后想给它分配一些任务
答案 0 :(得分:5)
使用ShutDownHook。当应用程序结束时,将调用您注册到挂钩的线程。您可以在此线程运行方法中添加所有清理代码(DB,Stream,Context等..)或任何自定义功能。
Runtime.getRuntime().addShutdownHook(new Thread() {
public void run() { // clean up code like closing streams,DB etc }
});