Warning: file_get_contents(/data/phpspider/zhask/data//catemap/6/multithreading/4.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Java 具有线程和阻止队列的消费者生产者_Java_Multithreading_Producer Consumer - Fatal编程技术网

Java 具有线程和阻止队列的消费者生产者

Java 具有线程和阻止队列的消费者生产者,java,multithreading,producer-consumer,Java,Multithreading,Producer Consumer,我编写了一个类“Producer”,它不断地解析特定文件夹中的文件。解析的结果将存储在消费者的队列中 public class Producer extends Thread { private BlockingQueue<MyObject> queue; ... public void run() { while (true) { //Store email attachments into dire

我编写了一个类“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);
        }
    }
}
公共类生成器扩展线程
{ 
私有阻塞队列;
...
公开募捐
{
while(true)
{
//将电子邮件附件存储到目录中
...
//排队
queue.put(myObject);
睡眠(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);
        }
    }
}
公共类使用者扩展线程
{ 
私有阻塞队列;
...
公开募捐
{
while(true)
{
MyObject o=queue.poll();
//对MyObject“o”进行操作
...
睡眠(5*60*1000);
}
}
}
当我运行程序时,“top”显示JAVA进程总是100%运行。我想这是因为无限循环

这是实现这一点的好方法还是有更节省资源的方法?

而不是

MyObject o = queue.poll();
试一试

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

而不是

MyObject o = queue.poll();
试一试


后者将阻塞,直到队列中有可用的内容为止,而前者总是立即返回,无论是否有可用的内容。

您是否在生产者和消费者中都使用共享队列?如果我使用共享队列,CPU使用率为零。请查看此链接:队列在生产者和消费者之间共享。您是否在生产者和消费者中都使用共享队列?在我的例子中,如果我使用共享队列,CPU使用率为零。只要看看这个链接:队列在生产者和消费者之间共享。