gpt4 book ai didi

java - 在不同的类中使用执行器并同步 CountDownLatch

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

大家好,我正在学习教程,我对我尝试应用从教程中获得的知识的一些事情感到好奇。

下面是一个Runner类

package Tutorial2;

import java.util.concurrent.CountDownLatch;
import java.util.concurrent.ExecutorService;
import java.util.concurrent.Executors;

public class Runner {

public void runIt() {

CountDownLatch latch = new CountDownLatch (6);
ExecutorService executor = Executors.newFixedThreadPool(2);

for (int i = 0; i < 10; i++) {
executor.submit(new Process(i, latch));
}

ExecutorService executor2 = Executors.newFixedThreadPool(2);

for (int i = 1000; i < 1010; i++) {
executor2.submit(new Process(i, latch));
}

try {
latch.await();
} catch (InterruptedException e) {
// TODO Auto-generated catch block
e.printStackTrace();
}

System.out.println("Program Ended");
}
}

下面是我的处理器类

package Tutorial2;

import java.util.concurrent.CountDownLatch;

public class Process implements Runnable {

private int id;
CountDownLatch latch = new CountDownLatch(6);

public Process(int id, CountDownLatch latch) {
this.id = id;
this.latch = latch;
}

@Override
public void run() {
System.out.println("Task Starting ID : " + id);

try {
Thread.sleep(3000);
} catch (InterruptedException e) {
// TODO Auto-generated catch block
e.printStackTrace();
}

System.out.println("Task Finished ID : " + id);
latch.countDown();
}
}

我想做的事情非常简单。所以有几个问题想请教各位专业人士。所以我知道每当 .countDown 被调用时 CountDownLatch 就会减一。如果倒计时为零,.await 将返回。

我很好奇的是,Runner 类中的 CountDownLatch 和 Process 类中的 CountDownLatch 应该不同,但 Process 类的 CountDownLatch 达到零似乎也会触发我放入 Runner 类中的 .await 。当我仅将 CountDownLatch 作为参数传递到 Process 类并且 Process 类中的 CountDownLatch 没有值返回到 Runner 类时,这是如何工作的?

另外,在下面,我设置了两个执行器,以便每个执行器都会对 CountDownLatch 进行倒计时,但我似乎得到的正在处理的线程数量比我在返回之前输入的数量 (6) 更多。我究竟做错了什么?我如何才能在 CountDownLatch 达到 0 时打印“程序结束”,即线程已从两个执行器总共运行 6 次。

最佳答案

通过 this.latch =atch;,您可以使用构造函数参数中传递的引用(即在 runIt 方法中创建的引用)覆盖对象的引用。 Process 类中的赋值 CountDownLatchatch = new CountDownLatch(6); 没有用,它什么也不做。只是让你感到困惑。

第二个问题不清楚...是的,一旦倒数到零,它就会释放await...不确定它与您拥有多少线程/执行器有什么关系。

关于java - 在不同的类中使用执行器并同步 CountDownLatch,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/35634540/

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