gpt4 book ai didi

java - 如何在这里应用java ExecutorService和Executors类

转载 作者:行者123 更新时间:2023-12-02 07:07:10 24 4
gpt4 key购买 nike

我想使用选项 2 中的线程池来替换选项 1 中的代码。如何实现?1
1.使用Join

Thread e1 = new Thread(new EventThread("e1"));
e1.start();
Thread e2 = new Thread(new EventThread("e2"));
e2.start();

e1.join();
e2.join();

// from here 'main' thread continue

2.使用线程池现在我想使用 ExecutorService 类来做同样的工作

public class EventThread implements Runnable{
public EventThread(String message){
}
}

ExecutorService executor = Executors.newFixedThreadPool(2);

Runnable worker = new EventThread("");
executor.execute(worker);


executor.shutdown();
while (!executor.isTerminated()) {

}
System.out.println("Finished all threads");

//从这里“主”线程继续

这与第一个的作用完全相同吗?或者我的代码是对的吗?谢谢。

最佳答案

没有。功能上的唯一区别是,在选项 2 中,只有一个线程在执行。您仍然需要向其中添加每个工作线程,固定大小只是可以同时运行的最大线程数(如果添加第三个线程,它将等到之前添加的线程之一完成)在运行之前)。

此外,不建议使用繁忙等待(带有条件 !executor.isTermminate() 的 while 循环),这也是不好的做法。相反,我建议使用 executor.awaitTermination(long timeout, TimeUnit unit)或者至少在循环中有一个 Thread.sleep() 。

关于java - 如何在这里应用java ExecutorService和Executors类,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/15960936/

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