多线程通信问题:Java中的wait()、notify()与Lock接口应用示例

原创 骑猪看日落 2024-10-08 03:12 35阅读 0赞

在Java中,wait(), notify(),以及Lock接口都是用来实现线程之间的通信和同步的。以下是一些具体的示例:

  1. wait()与notify():

    • 当一个线程调用Thread.sleep(long millis)时,它会释放当前的锁,进入等待状态。
    • 当另一个线程调用Thread.notify(Thread t)时,它会唤醒在等待这个锁的所有线程。
  2. Lock接口示例:

    • Lock提供了更细粒度的控制,比如可以提供公平锁、读写锁等。
    • 例如,一个简单的公平读写锁示例如下:
  1. import java.util.concurrent.locks.ReentrantReadWriteLock;
  2. public class FairReadWriteLockExample {
  3. private final ReentrantReadWriteLock lock = new ReentrantReadWriteLock();
  4. public void read() {
  5. lock.readLock().acquire();
  6. try {
  7. // 执行读取操作
  8. System.out.println("Reading...");
  9. } finally {
  10. lock.readLock().release();
  11. }
  12. }
  13. public void write() {
  14. lock.writeLock().acquire();
  15. try {
  16. // 执行写入操作
  17. System.out.println("Writing...");
  18. } finally {
  19. lock.writeLock().release();
  20. }
  21. }
  22. public static void main(String[] args) {
  23. FairReadWriteLockExample example = new FairReadWriteLockExample();
  24. example.read(); // 读取
  25. example.write(); // 写入
  26. // 在写入和读取之间,可以允许其他线程读取。
  27. }
  28. }

这个示例中,公平锁确保了在任何时候只有一个线程在写入或读取。

文章版权声明:注明蒲公英云原创文章,转载或复制请以超链接形式并注明出处。

发表评论

表情:
评论列表 (有 0 条评论,35人围观)

还没有评论,来说两句吧...

相关阅读

    相关 线通信Objectwaitnotify

    wait/notify等待通知方式 等待通知机制就是将处于等待状态的线程将由其它线程发出通知后重新获取CPU资源,继续执行之前没有执行完的任务。最典型的例子生产者–消费者