2个子线程通过 CreateSemaphore函数同步数据
时间: 2024-09-06 11:05:31 浏览: 21
在Java中,可以使用`java.util.concurrent.Semaphore`这个并发工具类来实现两个子线程之间的同步。`Semaphore`是一种信号量,它允许有限数量的线程进入某个临界区。创建Semaphore需要指定初始许可数,当许可数大于0时,线程可以获取(acquire)一个许可并继续执行;当许可数为0时,线程会被阻塞直到有其他线程释放许可。
下面是一个简单的例子,展示了如何使用`Semaphore`来同步两个子线程:
```java
import java.util.concurrent.Semaphore;
public class ThreadSyncExample {
private final Semaphore semaphore = new Semaphore(1); // 最多只有一个许可
public void threadA() {
try {
semaphore.acquire(); // 获取许可,如果不足会阻塞
// 线程A处理数据的部分...
} catch (InterruptedException e) {
e.printStackTrace();
} finally {
semaphore.release(); // 完成后释放许可,允许另一个线程获取
}
}
public void threadB() {
try {
semaphore.acquire(); // 尝试获取许可,如果有可用立即执行,否则阻塞
// 线程B处理数据的部分...
} catch (InterruptedException e) {
e.printStackTrace();
} finally {
semaphore.release(); // 无论是否完成都会释放许可
}
}
}
```
在这个例子中,线程A和线程B都需要先获得许可才能进入它们的临界区。这样,虽然它们同时存在,但由于Semaphore的存在,它们只能交替执行,从而达到同步的效果。