具有线程和阻塞队列的消费者-生产者
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立即,无论是否有可用的东西。
我写了一个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立即,无论是否有可用的东西。