gpt4 book ai didi

java - 在 Java 中,是否有 100% 确定的方法可以在所有其他线程完成其工作后停止线程?

转载 作者:行者123 更新时间:2023-12-01 12:57:24 25 4
gpt4 key购买 nike

我有一个消费者线程和多个生产者线程共享一个作业列表。当达到“生产限制”时,生产者线程结束。但是,如果不使用“中断”,我无法成功结束消费者线程。

我正在尝试停止消费者线程。在消费者线程中,我使用了 AtomicBoolean 变量(JDK 1.6)来停止 run 方法内的循环。但是,我无法在主类中找到一种方法来了解所有生产者线程都已结束。尝试在主类中的生产者线程上使用 join。

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

ExecutorService/Future/Callable.

遵循我的主要方法中的代码片段:

//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));

最佳答案

使用为所有生产者提供足够许可的CountDownLatch。当生产者完成生产时,就会倒计时。让一个(额外的)线程等待闩锁,然后杀死使用者/执行任何清理。

关于java - 在 Java 中,是否有 100% 确定的方法可以在所有其他线程完成其工作后停止线程?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/23768116/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com