编程升降同步器怎么用

时间:2025-01-26 23:23:25 网络游戏

编程中的升降同步器通常指的是 CountDownLatch,它是一个同步辅助类,用于让一个或多个线程等待其他线程完成操作。以下是如何使用CountDownLatch的基本步骤和示例代码:

创建CountDownLatch实例

创建一个CountDownLatch实例,并指定初始计数。

如果需要等待所有线程完成,则计数器的初始值应为线程数;如果只需要等待一个线程完成,则初始值为1。

使用await()方法

在需要等待的线程中调用`await()`方法,该线程将阻塞,直到计数器减至0。

使用countDown()方法

在完成任务的线程中调用`countDown()`方法,计数器减1。

示例代码

```java

import java.util.concurrent.CountDownLatch;

public class CountDownLatchExample {

private static final int THREAD_COUNT = 5;

private static final CountDownLatch latch = new CountDownLatch(THREAD_COUNT);

public static void main(String[] args) throws InterruptedException {

for (int i = 0; i < THREAD_COUNT; i++) {

new Thread(new Worker(latch)).start();

}

// 主线程等待所有工作线程完成

latch.await();

System.out.println("所有工作线程已完成,主线程继续执行。");

}

static class Worker implements Runnable {

private final CountDownLatch latch;

public Worker(CountDownLatch latch) {

this.latch = latch;

}

@Override

public void run() {

try {

System.out.println(Thread.currentThread().getName() + " 开始工作。");

Thread.sleep((long) (Math.random() * 1000)); // 模拟工作耗时

System.out.println(Thread.currentThread().getName() + " 工作完成。");

} catch (InterruptedException e) {

e.printStackTrace();

} finally {

// 工作线程完成任务后,计数器减1

latch.countDown();

}

}

}

}

```

解释

创建CountDownLatch实例

```java

private static final CountDownLatch latch = new CountDownLatch(THREAD_COUNT);

```

这里创建了一个初始计数为5的CountDownLatch实例。

启动工作线程

```java

for (int i = 0; i < THREAD_COUNT; i++) {

new Thread(new Worker(latch)).start();

}

```

创建并启动了5个工作线程。

主线程等待

```java

latch.await();

```

主线程调用`await()`方法,阻塞直到所有工作线程调用`countDown()`方法,计数器减至0。

工作线程完成任务

```java

System.out.println(Thread.currentThread().getName() + " 工作完成。");

latch.countDown();

```

每个工作线程在完成任务后调用`countDown()`方法,计数器减1。

通过这种方式,可以确保主线程在所有工作线程完成任务后才继续执行,从而实现线程间的同步。