作者热门文章
- html - 出于某种原因,IE8 对我的 Sass 文件中继承的 html5 CSS 不友好?
- JMeter 在响应断言中使用 span 标签的问题
- html - 在 :hover and :active? 上具有不同效果的 CSS 动画
- html - 相对于居中的 html 内容固定的 CSS 重复背景?
我编写了一个类“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/
我是一名优秀的程序员,十分优秀!