首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >在所有其他线程用Java完成任务之后,是否有100%确定的方法来停止线程?

在所有其他线程用Java完成任务之后,是否有100%确定的方法来停止线程?
EN

Stack Overflow用户
提问于 2014-05-20 19:15:18
回答 2查看 116关注 0票数 0

我有一个使用者线程和几个生产者线程共享一个作业列表。当达到“生产极限”时,生产者线程就会结束。但是,如果不使用“中断”,我无法成功地终止使用者线程。

我正在试图阻止消费者的问题。在使用者线程中,我使用了一个AtomicBoolean变量(JDK1.6)来停止运行方法中的循环。但是,我无法在主类中找到一种方法来了解所有生产者线程都已结束。尝试在主类中的生产者线程上使用联接。

注意,当所有线程同时运行时。我的主类中的当前代码突然结束了使用者线程,而没有完成所有的作业。我在找答案,不用用

执行服务/未来/可调用。

下面是我的主要方法中的代码片段:

代码语言:javascript
复制
//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));
EN

回答 2

Stack Overflow用户

发布于 2014-05-20 19:40:32

对所有生产商使用有足够许可证的CountDownLatch。当一个制片人完成生产时,它就会被计算下来。让一个(额外的)线程在闩锁上等待,然后杀死使用者/执行任何清理。

票数 1
EN

Stack Overflow用户

发布于 2014-05-20 20:07:30

我在附近做了一件事。在主方法中,我修改了上面代码的最后一部分,如下所示,

代码语言:javascript
复制
        //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中.

你们同意吗?

票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/23768116

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档