写一个java线程池的简单应用,主线程需要等待子线程执行完成后输出一句话
时间: 2023-03-05 14:43:04 浏览: 140
可以这样编写:public class SimpleThreadPool {
public static void main(String[] args) {
// 创建线程池
ExecutorService executor = Executors.newFixedThreadPool(5);
// 创建 Runnable 对象任务
Runnable task = () -> {
System.out.println("子线程正在执行……");
};
// 提交任务到线程池
executor.execute(task);
// 关闭线程池
executor.shutdown();
// 等待子线程执行完毕
while (!executor.isTerminated()) {
}
System.out.println("子线程执行完成!");
}
}
相关问题
写一个java线程池的简单应用,主线程需要等待多个子线程执行完成后输出一句话
好的,以下是一个简单的 Java 线程池应用示例,主线程创建一个固定大小的线程池,提交多个任务给线程池执行,主线程需要等待所有任务执行完成后输出一句话。
```java
import java.util.concurrent.ExecutorService;
import java.util.concurrent.Executors;
import java.util.concurrent.TimeUnit;
public class ThreadPoolExample {
public static void main(String[] args) throws InterruptedException {
int numTasks = 5;
ExecutorService executor = Executors.newFixedThreadPool(2); // 创建一个固定大小为2的线程池
for (int i = 1; i <= numTasks; i++) {
Runnable task = new Task(i);
executor.submit(task); // 提交任务给线程池执行
}
executor.shutdown(); // 关闭线程池
executor.awaitTermination(Long.MAX_VALUE, TimeUnit.NANOSECONDS); // 等待所有任务执行完成
System.out.println("所有任务执行完成!");
}
static class Task implements Runnable {
private final int taskId;
Task(int taskId) {
this.taskId = taskId;
}
@Override
public void run() {
System.out.println("任务 " + taskId + " 开始执行,线程名为 " + Thread.currentThread().getName());
try {
Thread.sleep(2000);
} catch (InterruptedException e) {
e.printStackTrace();
}
System.out.println("任务 " + taskId + " 执行完成,线程名为 " + Thread.currentThread().getName());
}
}
}
```
在上面的示例中,`Task` 类实现了 `Runnable` 接口,表示一个要执行的任务,每个任务会在执行前输出一个信息和当前执行该任务的线程名,然后等待 2 秒钟,之后输出一个信息和当前执行该任务的线程名,表示任务已经执行完成。
`main` 方法中创建了一个固定大小为 2 的线程池,提交了 5 个任务给线程池执行。然后调用了 `executor.shutdown()` 方法关闭线程池,并调用 `executor.awaitTermination(Long.MAX_VALUE, TimeUnit.NANOSECONDS)` 方法等待所有任务执行完成,之后输出一句话表示所有任务执行完成。
java 主线程等待线程池任务执行完成再往下执行
当主线程需要等待线程池任务执行完成后再往下执行的情况下,可以通过使用CountDownLatch或Future来实现。
如果使用CountDownLatch,可以在主线程中创建一个CountDownLatch对象,并设置它的计数器值为线程池中任务的数量。每一个任务执行完成后,都将计数器的值减1。主线程可以通过调用CountDownLatch.await()方法来等待所有任务完成。当计数器的值变为0时,await()方法会返回,主线程就可以继续执行后续操作。
如果使用Future,可以在主线程中提交所有任务到线程池,并将返回的Future对象保存在一个列表中。主线程可以通过Future的get()方法来等待任务执行完成。当所有任务都执行完成后,主线程就可以继续执行后续操作。
需要注意的是,在使用线程池的过程中,一定要及时释放线程资源,避免线程泄漏。同时,合理地设置线程池的大小和配置项,也可以提高程序的执行效率。
阅读全文