【问题标题】:Consumer-Producer with Threads and BlockingQueues具有线程和阻塞队列的消费者-生产者
【发布时间】:2015-09-25 23:58:06
【问题描述】:

我编写了一个“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);
        }
    }
}

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

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% 状态。我猜是因为无限循环。

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

【问题讨论】:

  • 你不是在生产者和消费者中都使用共享队列吗?如果我使用共享队列,CPU 使用率为零。看看这个链接:javarevisited.blogspot.in/2012/02/…
  • 队列在生产者和消费者之间共享。

标签: java multithreading producer-consumer


【解决方案1】:

而不是

MyObject o = queue.poll();

试试

MyObject o = queue.take();

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

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2011-01-09
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2014-10-21
    • 2016-08-30
    • 1970-01-01
    • 2021-09-10
    相关资源
    最近更新 更多