具有线程和阻塞问题的消费者 - 制作者

时间:2015-07-08 07:45:39

标签: java multithreading producer-consumer

我写了一个班级'制片人'这是持续解析特定文件夹中的文件。解析后的结果将存储在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%。我想这是因为无限循环。

这是实现这个的好方法还是有更省钱的方法呢?

1 个答案:

答案 0 :(得分:4)

而不是

MyObject o = queue.poll();

MyObject o = queue.take();

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