Java 具有线程和阻止队列的消费者生产者
我编写了一个类“Producer”,它不断地解析特定文件夹中的文件。解析的结果将存储在消费者的队列中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
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使用率为零。只要看看这个链接:队列在生产者和消费者之间共享。