Java多线程同步问题:互斥锁、信号量等工具的使用示例
在Java中,我们可以使用java.util.concurrent.locks.Lock
接口来实现互斥锁,以及java.util.concurrent.Semaphore
来实现信号量。
以下是这两个工具的基本使用示例:
- 互斥锁(Lock):
```java
import java.util.concurrent.locks.Lock;
import java.util.concurrent.locks.ReentrantLock;
class Counter {
private Lock lock = new ReentrantLock();
public void increment() {
lock.lock();
try {
count++;
System.out.println("Counter incremented to " + count);
} finally {
lock.unlock();
}
}
private int count = 0;
}
2. 信号量(Semaphore):
```java
import java.util.concurrent.Semaphore;
class CounterWithSemaphore {
private Semaphore semaphore = new Semaphore(1);
public void increment() {
semaphore.acquire(); // 信号量的acquire方法会阻塞直到获取到信号量
try {
count++;
System.out.println("Counter incremented to " + count);
} finally {
semaphore.release(); // 信号量的release方法会将信号量的数量+1
}
}
private int count = 0;
}
以上示例中,互斥锁用于确保同一时间只有一个线程可以访问共享资源,而信号量则提供了更精细的控制,比如限制同时进入的线程数量。
还没有评论,来说两句吧...