在Java中,你可以使用java.util.concurrent
包中的ExecutorService
接口和它的实现类(如ThreadPoolExecutor
)来创建一个线程池。以下是一个简单的示例,展示了如何创建一个固定大小的线程池:
java复制代码
import java.util.concurrent.ExecutorService; | |
import java.util.concurrent.Executors; | |
public class ThreadPoolExample { | |
public static void main(String[] args) { | |
// 创建一个固定大小的线程池,包含3个线程 | |
ExecutorService executorService = Executors.newFixedThreadPool(3); | |
// 提交任务到线程池执行 | |
for (int i = 0; i < 10; i++) { | |
final int taskId = i; | |
Runnable worker = new Runnable() { | |
@Override | |
public void run() { | |
System.out.println("Running task " + taskId + " in thread " + Thread.currentThread().getName()); | |
// 模拟任务执行时间 | |
try { | |
Thread.sleep(2000); | |
} catch (InterruptedException e) { | |
e.printStackTrace(); | |
} | |
} | |
}; | |
executorService.execute(worker); | |
} | |
// 关闭线程池,等待所有任务执行完毕后再关闭 | |
executorService.shutdown(); | |
while (!executorService.isTerminated()) { | |
// 等待线程池关闭 | |
} | |
System.out.println("All tasks completed."); | |
} | |
} |
这个示例中,我们首先使用Executors.newFixedThreadPool(3)
创建了一个包含3个线程的固定大小线程池。然后,我们循环提交了10个任务到线程池执行。每个任务都是一个Runnable
对象,当线程池中的线程空闲时,它们会执行这些任务。
最后,我们使用executorService.shutdown()
关闭了线程池,并使用一个while
循环等待所有任务执行完毕后再继续执行后续代码。当线程池中的所有任务都执行完毕后,executorService.isTerminated()
会返回true
,这时我们就可以继续执行后续代码了。
注意:在实际应用中,你可能不需要在关闭线程池后使用while
循环等待所有任务执行完毕。你可以让主线程继续执行其他任务,或者通过其他方式(如Future
和FutureTask
)来检查任务的执行状态。