多线程通信问题:Java中的wait()、notify()与Lock接口应用示例
在Java中,wait(), notify(),以及Lock接口都是用来实现线程之间的通信和同步的。以下是一些具体的示例:
wait()与notify():
- 当一个线程调用Thread.sleep(long millis)时,它会释放当前的锁,进入等待状态。
- 当另一个线程调用Thread.notify(Thread t)时,它会唤醒在等待这个锁的所有线程。
Lock接口示例:
- Lock提供了更细粒度的控制,比如可以提供公平锁、读写锁等。
- 例如,一个简单的公平读写锁示例如下:
import java.util.concurrent.locks.ReentrantReadWriteLock;
public class FairReadWriteLockExample {
private final ReentrantReadWriteLock lock = new ReentrantReadWriteLock();
public void read() {
lock.readLock().acquire();
try {
// 执行读取操作
System.out.println("Reading...");
} finally {
lock.readLock().release();
}
}
public void write() {
lock.writeLock().acquire();
try {
// 执行写入操作
System.out.println("Writing...");
} finally {
lock.writeLock().release();
}
}
public static void main(String[] args) {
FairReadWriteLockExample example = new FairReadWriteLockExample();
example.read(); // 读取
example.write(); // 写入
// 在写入和读取之间,可以允许其他线程读取。
}
}
这个示例中,公平锁确保了在任何时候只有一个线程在写入或读取。
还没有评论,来说两句吧...