gpt4 book ai didi

java - 具有线程和阻塞队列的消费者-生产者

转载 作者:行者123 更新时间:2023-12-01 18:13:15 26 4
gpt4 key购买 nike

我编写了一个类“Producer”,它连续解析特定文件夹中的文件。解析的结果将存储在Consumer的队列中。

public class Producer extends Thread
{
private BlockingQueue<MyObject> queue;
...
public void run()
{
while (true)
{
//Store email attachments into directory
...
//Fill the queue
queue.put(myObject);


sleep(5*60*1000);
}
}
}

我的消费者类正在连续检查队列中是否有可用的内容。如果是这样,它正在对解析结果执行一些工作。

public class Consumer extends Thread
{
private BlockingQueue<MyObject> queue;
...
public void run()
{
while (true)
{
MyObject o = queue.poll();

// Work on MyObject 'o'
...
sleep(5*60*1000);
}
}
}

当我运行程序时,“top”显示 JAVA 进程始终处于 100%。我猜这是因为无限循环。

这是实现此目的的好方法还是有更节省资源的方法?

最佳答案

而不是

MyObject o = queue.poll();

尝试

MyObject o = queue.take();

后者将阻塞,直到队列中有可用的东西,而前者总是立即返回,无论是否有可用的东西。

关于java - 具有线程和阻塞队列的消费者-生产者,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/31286486/

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