我已经看到从Web应用程序创建的Thread
在重新部署war文件时不会被杀死。为了测试,我创建了一个ServletContextListener
,并通过contextInitialized
的方法创建了一个Thread
。如果我删除生成Thread
的代码并重新部署战争,那么仍在运行。
import javax.servlet.ServletContextEvent;
import javax.servlet.ServletContextListener;
import javax.servlet.annotation.WebListener;
@WebListener
public class RpiServletContextListener implements ServletContextListener {
public RpiServletContextListener() {
}
@Override
public void contextInitialized(ServletContextEvent event) {
new Thread(() -> {
while(true) {
System.out.println("Here------------------");
try {
TimeUnit.SECONDS.sleep(30);
} catch (Exception e) {
e.printStackTrace();
}
}
}).start();
}
@Override
public void contextDestroyed(ServletContextEvent event) {
}
}
环境:码头
答案 0 :(得分:0)
你可以有一个标记停止并在你的while循环中引用它。
@WebListener
public class RpiServletContextListener implements ServletContextListener {
private final AtomicInteger stop = new AtomicInteger(1);
public RpiServletContextListener() {
}
@Override
public void contextInitialized(ServletContextEvent event) {
new Thread(() -> {
while(stop.get() <= 1) {
System.out.println("Here------------------");
try {
TimeUnit.SECONDS.sleep(30);
} catch (Exception e) {
e.printStackTrace();
}
}
}).start();
}
@Override
public void contextDestroyed(ServletContextEvent event) {
this.stop.incrementAndGet();
}
}