gpt4 book ai didi

java - 如何正确停止使用如此多 CPU 的命令队列循环?

转载 作者:行者123 更新时间:2023-12-01 06:46:22 24 4
gpt4 key购买 nike

我有一个 while 循环,用于检查包含要执行的程序的命令的数组列表是否为空。显然,如果它不为空,它就会做一些事情,但如果它现在是空的,我只有一个 Thread.sleep(1000) 用于其他。这使得与之交互的任何东西都变得相当缓慢。有什么方法可以让它运行的线程阻塞,直到添加新命令为止? (它在自己的线程中运行,因此这对我来说似乎是最好的解决方案)或者有更好的解决方案吗?

最佳答案

您可以使用wait()notify()让向列表添加内容的线程通知消费者线程有是要读的东西。然而,这需要适当的同步等..

但是解决问题的更好方法是使用 BlockingQueue 来代替。根据定义,它们是同步类,出队将适当阻塞并在添加内容时唤醒。 LinkedBlockingQueue如果您希望队列不受限制,那么这是一个很好的类。 ArrayBlockingQueue当您希望将有限数量的项目存储在队列中(或将整数传递给构造函数的 LinkedBlockingQueue)时可以使用。如果队列有限,那么如果队列已满,queue.add(...) 将阻塞。

BlockingQueue<Message> queue = new LinkedBlockingQueue<Messsage>();
...
// producer thread(s) add a message to the queue
queue.add(message);
...
// consumer(s) wait for a message to be added to the queue and then removes it
Message message = queue.take();
...
// you can also wait for certain amount of time, returns null on timeout
Message message = queue.poll(10, TimeUnit.MINUTES);

关于java - 如何正确停止使用如此多 CPU 的命令队列循环?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/11457529/

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