线程池并行执行逻辑代码块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`类,可以提高系统的可伸缩性和性能。