gpt4 book ai didi

Java-在消费者等待并且tomcat关闭时停止线程

转载 作者:行者123 更新时间:2023-11-28 22:02:00 25 4
gpt4 key购买 nike

我有一个 servlet,它是一个单例。

在 init 中,我创建了生产者和消费者。

consumer = new MyThread();
consumer.start();

方法运行是这样的:

@Override
public void run() {
while (!isShutdown()) {
if (queue.isEmpty())
queue.wait();
else
...
}
}

然后我有 destroy 方法。将 shutdown 设置为 true 并且我使用 .join

        consumer.setShutdown(true); 
consumer.join();

但是 .join 方法被锁定了......并且永远不会完成。如果我将 queue.wait 更改为 Thread.sleep(),它会起作用...但我不想更改...我做错了什么?

如果我没有完成线程,我明白了:严重:Web 应用程序 [/test] 似乎启动了一个名为 [Comsumer0] 的线程,但未能停止它。这很可能会造成内存泄漏。

最佳答案

使用等待/通知方法是创建消费者-生产者模式的老方法。

最好使用BlockingQueue。

BlockingQueue.put() - 用于生产者,BlockingQueue.poll() - 用于消费者。

BlockingQueue 将等待方法隐藏在 BlockingQueue.pollBlockingQueue.put 下,并将阻塞消费者线程,直到生产者向队列添加值。

要修复上面的示例,您应该让它等待有限的时间,例如 queue.wait(1000),或者唤醒消费者线程显式调用 queue.notify().

关于Java-在消费者等待并且tomcat关闭时停止线程,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/34160475/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com