Java线程池来控制并发度,限制同时处理的线程数,避免数据竞争。
时间: 2024-03-27 10:39:10 浏览: 12
Java线程池可以实现对线程的管理和调度,通过控制线程池的大小和工作队列的长度,可以控制并发度,限制同时处理的线程数,避免数据竞争。下面是一个简单的示例:
```java
// 创建一个固定大小的线程池,最多同时执行3个任务
ExecutorService executorService = Executors.newFixedThreadPool(3);
for (int i = 0; i < 10; i++) {
final int taskId = i;
executorService.execute(new Runnable() {
@Override
public void run() {
try {
System.out.println("Task " + taskId + " is running.");
Thread.sleep(1000);
} catch (InterruptedException e) {
e.printStackTrace();
}
System.out.println("Task " + taskId + " is completed.");
}
});
}
// 关闭线程池
executorService.shutdown();
```
在上面的示例中,我们创建了一个固定大小为3的线程池,然后提交了10个任务。由于线程池的大小为3,所以最多同时执行3个任务,避免了数据竞争的问题。当所有的任务都执行完毕后,我们调用了`shutdown()`方法来关闭线程池。
需要注意的是,在使用线程池时,如果工作队列的长度过长,也会导致性能问题。可以根据具体情况来调整线程池的大小和工作队列的长度,以达到最优的性能。