【发布时间】:2009-09-01 13:32:38
【问题描述】:
我有一个 servlet 过滤器,它携带一些逻辑并在其主页处理请求之前产生输出。我有一个新的需求,需要比生成输出的那一刻晚几秒钟(延迟约 10 秒)。由于之前做出的某些糟糕的设计选择,我无法移动过滤器的位置,只是为了让输出在之后发送。
我已选择生成一个线程并在其中延迟消息的传输。我目前没有采取任何明确的步骤来停止该线程的执行。我不确定是否一切都得到了妥善清理。在此之后我应该使用 join() 或 interrupt() 或任何其他 Thread 方法来安全地清理吗?
所以在主 servlet 代码中我有这样的东西......
Thread t = new Thread(new MessageSender(message, 10000));
t.start();
//Carry on.. la la la
虽然这个类中还有其他字段,但我只是去掉了很多非必要的东西,比如建立数据库连接等,以明确这一点。
private static class MessageSender implements Runnable {
String message;
int delay;
public MessageSender(String message, int delay) {
this.message = message;
this.delay = delay;
}
public void run() {
try {
Thread.sleep(delay);
System.out.println(new java.util.Date() + ": hello world");
} catch (InterruptedException e) {
// Do blah
} catch (Exception e) {
// Do blah blah
} finally {
// Close connections and stuff
}
}
}
【问题讨论】:
标签: java multithreading servlets