Java并发编程:线程池的使用示例
在Java中,线程池是一种管理和重复利用线程的方式。这种方式可以提高系统的响应速度,减少创建和销毁线程的开销。
以下是一个简单的线程池使用示例:
import java.util.concurrent.ExecutorService;
import java.util.concurrent.Executors;
public class ThreadPoolExample {
public static void main(String[] args) {
// 创建一个固定大小的线程池
ExecutorService executor = Executors.newFixedThreadPool(5); // 限制最多同时运行5个任务
// 提交任务到线程池执行
for (int i = 0; i < 10; i++) { // 假设每个任务耗时1秒
executor.submit(new Task(i)); // 传递Task对象给线程池,由它来调用Task的run方法
}
// 关闭线程池,所有提交的任务将全部阻塞直到线程池关闭
executor.shutdown();
// 确保所有任务已经执行完毕(即使任务可能已经阻塞)
while (!executor.isTerminated()) {
try {
Thread.sleep(100); // 每隔100毫秒检查一次,避免频繁同步造成性能损失
} catch (InterruptedException e) {
e.printStackTrace();
}
}
// 现在所有任务已经执行完毕且线程池已经被关闭
}
// 一个简单的任务示例
static class Task implements Runnable {
private int id;
public Task(int id) {
this.id = id;
}
@Override
public void run() {
System.out.println("Task " + id + " is running..."); // 任务开始执行时输出消息
try {
Thread.sleep(2000); // 模拟耗时操作,这里设置为2秒
} catch (InterruptedException e) {
e.printStackTrace();
}
System.out.println("Task " + id + " has completed its execution..."); // 任务执行完成后输出消息
}
}
}
这个示例创建了一个固定大小的线程池(5个线程),然后提交了10个耗时的任务到线程池。每个任务在开始执行和执行完毕时都会打印一条消息。
还没有评论,来说两句吧...