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

Consumer-Producer with Threads and BlockingQueues

我写了一个Class 'Producer',它连续 解析特定文件夹中的文件。解析后的结果将存储在队列中,供消费者使用。

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);
        }
    }
}

我的消费者Class 不断 检查队列中是否有可用的东西。如果是这样,它正在对解析结果执行一些工作。

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();

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