【发布时间】:2015-12-09 01:12:27
【问题描述】:
我有一个 servlet,它是一个单例。
在初始化中,我创建了生产者和消费者。
consumer = new MyThread();
consumer.start();
方法运行是这样的:
@Override
public void run() {
while (!isShutdown()) {
if (queue.isEmpty())
queue.wait();
else
...
}
}
然后我有销毁方法。 将shutdown设置为true,我使用.join
consumer.setShutdown(true);
consumer.join();
但是 .join 方法得到了锁定.. 并且永远不会完成。 如果我将 queue.wait 更改为 Thread.sleep(),它可以工作...但我不想更改...我做错了什么?
如果我没有完成线程,我明白了: 严重:Web 应用程序 [/test] 似乎已经启动了一个名为 [Comsumer0] 的线程,但未能停止它。这很可能会造成内存泄漏。
【问题讨论】:
标签: java multithreading tomcat thread-safety