请阐述Java的并发包(java.util.concurrent)的功能,以及一个实际的应用例子。
Java的并发包主要包含了以下几个关键部分:
线程库:提供了一种创建和管理线程的方式,如Thread类和Runnable接口。
并发工具类:提供了许多用于同步、等待和控制多个线程操作的工具,如CountDownLatch、Semaphore、CyclicBarrier等。
并发API:Java 1.5以后,引入了并发编程的新特性,如Fork/Join框架、Executor服务、Callable和Future接口等。
实际应用例子:
一个常见的并发应用场景是Web服务器处理多个请求。下面是一个简单的例子:
import java.util.concurrent.ExecutorService;
import java.util.concurrent.Executors;
public class WebServerExample {
private static final int NUM_REQUESTS = 1000;
private static final ExecutorService executor = Executors.newFixedThreadPool(5); // 使用固定大小的线程池
public static void main(String[] args) {
for (int i = 0; i < NUM_REQUESTS; i++) {
// 创建一个任务,模拟处理请求
Runnable requestHandler = () -> {
System.out.println("Handling request " + i);
// 模拟处理时间(这里假设为1秒)
try {
Thread.sleep(1000); // 1秒
} catch (InterruptedException e) {
e.printStackTrace();
}
};
// 将任务提交到线程池执行
executor.execute(requestHandler);
}
// 等待所有任务完成
executor.shutdown();
// 检查线程池是否已经完全关闭(不会接受新的任务)
if (!executor.isTerminated()) {
System.out.println("Warning: Executor service is not fully terminated.");
}
}
}
在这个例子中,我们创建了一个Web服务器,它能同时处理10个请求。每个请求都模拟了一个耗时的任务来处理。最后,我们使用线程池来并行执行这些任务,实现了高并发的Web服务器场景。
还没有评论,来说两句吧...