我写了一个班级'制片人'这是持续解析特定文件夹中的文件。解析后的结果将存储在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);
}
}
}
当我运行我的程序时,&#39; top&#39;表明JAVA进程总是100%。我想这是因为无限循环。
这是实现这个的好方法还是有更省钱的方法呢?
答案 0 :(得分:4)
而不是
MyObject o = queue.poll();
试
MyObject o = queue.take();
后者将阻塞,直到队列中有可用的东西,而前者将始终立即返回,无论是否有可用的东西。