当前位置:实例文章 » 其他实例» [文章]线程池并行执行逻辑代码块Demo示例(await同步)

线程池并行执行逻辑代码块Demo示例(await同步)

发布人:shili8 发布时间:2025-02-22 19:45 阅读次数:0

**线程池并行执行逻辑代码块Demo示例**

在Java中,线程池是实现多线程编程的一种高效方式。通过使用线程池,我们可以重用已经创建的线程,从而避免频繁地创建和销毁线程带来的性能开销。在本文中,我们将展示如何使用线程池并行执行逻辑代码块,特别是使用`await`关键字来实现同步。

###什么是线程池?

线程池是一种管理多个线程的机制,它可以重用已经创建的线程,从而避免频繁地创建和销毁线程带来的性能开销。线程池通常由一个固定大小的线程集合组成,每个线程都有自己的ID和状态。

### 为什么使用线程池?

使用线程池有以下几个好处:

* **提高性能**:通过重用已经创建的线程,可以避免频繁地创建和销毁线程带来的性能开销。
* **降低资源占用**:线程池可以减少系统资源的占用,因为不需要频繁地创建和销毁线程。
* **提高可伸缩性**:线程池可以根据实际需求动态调整大小,从而提高系统的可伸缩性。

### 如何使用线程池?

使用线程池有以下几个步骤:

1. **创建线程池**:通过调用`Executors.newFixedThreadPool()`方法,可以创建一个固定大小的线程集合。
2. **提交任务**:通过调用`submit()`方法,可以将任务提交到线程池中执行。
3. **等待结果**:通过使用`await`关键字,可以等待任务的执行结果。

### Demo示例以下是使用线程池并行执行逻辑代码块的Demo示例:

javaimport java.util.concurrent.ExecutorService;
import java.util.concurrent.Executors;

public class ThreadPoolDemo {
 public static void main(String[] args) throws InterruptedException {
 // 创建一个固定大小的线程集合(5个线程)
 ExecutorService executor = Executors.newFixedThreadPool(5);

 // 提交任务到线程池中执行 for (int i =0; i < 10; i++) {
 final int index = i;
 executor.submit(() -> {
 System.out.println("Task " + index + " is running...");
 try {
 Thread.sleep(1000); // 模拟任务的执行时间 } catch (InterruptedException e) {
 Thread.currentThread().interrupt();
 }
 System.out.println("Task " + index + " has finished.");
 });
 }

 // 等待所有任务的执行结果 executor.shutdown();
 while (!executor.isTerminated()) {
 try {
 Thread.sleep(100);
 } catch (InterruptedException e) {
 Thread.currentThread().interrupt();
 }
 }
 }
}


在上述Demo示例中,我们创建了一个固定大小的线程集合(5个线程),然后提交10个任务到线程池中执行。每个任务都模拟了一段时间的执行,等待所有任务完成后才结束。

### 使用`await`关键字使用`await`关键字可以等待任务的执行结果。在上述Demo示例中,我们没有直接使用`await`关键字,因为Java中的线程池已经提供了一个等待机制,即通过调用`shutdown()`方法并检查`isTerminated()`状态。

但是,如果我们需要在多个线程之间进行同步,可以使用`Lock`类或其他同步工具来实现。以下是使用`Lock`类的示例:

javaimport java.util.concurrent.ExecutorService;
import java.util.concurrent.Executors;
import java.util.concurrent.locks.Lock;
import java.util.concurrent.locks.ReentrantLock;

public class ThreadPoolDemo {
 private static final Lock lock = new ReentrantLock();

 public static void main(String[] args) throws InterruptedException {
 ExecutorService executor = Executors.newFixedThreadPool(5);

 for (int i =0; i < 10; i++) {
 final int index = i;
 executor.submit(() -> {
 System.out.println("Task " + index + " is running...");
 try {
 Thread.sleep(1000);
 } catch (InterruptedException e) {
 Thread.currentThread().interrupt();
 }
 lock.lock();
 try {
 System.out.println("Task " + index + " has finished.");
 } finally {
 lock.unlock();
 }
 });
 }

 executor.shutdown();
 while (!executor.isTerminated()) {
 try {
 Thread.sleep(100);
 } catch (InterruptedException e) {
 Thread.currentThread().interrupt();
 }
 }
 }
}


在上述示例中,我们使用`Lock`类来实现同步。在每个任务中,我们通过调用`lock()`方法获取锁,然后执行任务的逻辑。等待所有任务完成后,通过调用`unlock()`方法释放锁。

### 总结线程池是实现多线程编程的一种高效方式。通过使用线程池,可以重用已经创建的线程,从而避免频繁地创建和销毁线程带来的性能开销。在本文中,我们展示了如何使用线程池并行执行逻辑代码块,特别是使用`await`关键字来实现同步。通过使用线程池和`Lock`类,可以提高系统的可伸缩性和性能。

相关标签:
其他信息

其他资源

Top