我有一个使用者线程和几个生产者线程共享一个作业列表。当达到“生产极限”时,生产者线程就会结束。但是,如果不使用“中断”,我无法成功地终止使用者线程。
我正在试图阻止消费者的问题。在使用者线程中,我使用了一个AtomicBoolean变量(JDK1.6)来停止运行方法中的循环。但是,我无法在主类中找到一种方法来了解所有生产者线程都已结束。尝试在主类中的生产者线程上使用联接。
注意,当所有线程同时运行时。我的主类中的当前代码突然结束了使用者线程,而没有完成所有的作业。我在找答案,不用用
执行服务/未来/可调用。
下面是我的主要方法中的代码片段:
//Job container
JobContainer<CalcJob> jobContainer = new JobContainer<CalcJob>(100);
//One Consumer
Consumer consumer = new Consumer(jobContainer);
Thread T0 = new Thread(consumer);
T0.start();
//Multiple Producers
JobProducer jobProducer = new JobProducer(jobContainer, 0, 10);
Thread T1 = new Thread(jobProducer);
T1.start();
JobProducer jobProducer1 = new JobProducer(jobContainer, 1, 10);
Thread T2 = new Thread(jobProducer1);
T2.start();
//Join statements
T0.join();
T1.join();
T2.join();
//Stop consumer
consumer.stop(new AtomicBoolean(true));发布于 2014-05-20 19:40:32
对所有生产商使用有足够许可证的CountDownLatch。当一个制片人完成生产时,它就会被计算下来。让一个(额外的)线程在闩锁上等待,然后杀死使用者/执行任何清理。
发布于 2014-05-20 20:07:30
我在附近做了一件事。在主方法中,我修改了上面代码的最后一部分,如下所示,
//Wait until all jobs are processed
while(false == jobContainer.isEmpty()){
synchronized(jobContainer){
jobContainer.wait(100);
}
}
//once job list is empty, stop the consumer
calculator.stop(new AtomicBoolean(true));注意:我也可以将代码移动到JobContainer中.
你们同意吗?
https://stackoverflow.com/questions/23768116
复制相似问题