线程间通信机制waitnotify的原理和应用是怎样的?
- 内容介绍
- 文章标签
- 相关推荐
本文共计1815个文字,预计阅读时间需要8分钟。
线程通信是指多个线程之间,在某个线程修改了一个对象的值时,其他线程能够感知到这个变化并做出相应操作,实现线程间信息的传递。具体来说,线程通信使得线程之间能够互相感知对方对共享资源(如对象)的修改,并据此执行相关的操作。
什么是线程通信
线程通信指的是多个线程之间,某个线程修改了一个对象的值时,其他的线程也能够感知到该值的变化并进行相关的操作,使线程与线程之间间接的实现通信。实现线程通信的方法可以通过以下几种方式:
- 基于volatile修饰的共享对象。
- 通过wait/notify机制实现。
- 线程的join()方法。
- 使用synchronized同步关键字。
- 另外也可借助中间件或者数据库做数据共享实现通信等等。
本文主要就通过wait/notify机制进一步分析讲解。
wait/notify
相信各位对于wait/notify应该不会太陌生,他们的主要作用就是用于控制线程之间的等待与唤醒,具体方法作用如下:
- wait():使当前线程进入阻塞状态,并且释放当前线程持有的锁。与sleep()不同的是sleep()不会释放持有的锁。
- notify():唤醒处于阻塞状态下的一个线程。
- notifyAll():唤醒处于阻塞状态下的所有线程。
需要唤醒一个被Object.wait()方法阻塞的线程有两种方法:
- 其他线程调用了同一个对象的notify()/notifyAll()方法。
本文共计1815个文字,预计阅读时间需要8分钟。
线程通信是指多个线程之间,在某个线程修改了一个对象的值时,其他线程能够感知到这个变化并做出相应操作,实现线程间信息的传递。具体来说,线程通信使得线程之间能够互相感知对方对共享资源(如对象)的修改,并据此执行相关的操作。
什么是线程通信
线程通信指的是多个线程之间,某个线程修改了一个对象的值时,其他的线程也能够感知到该值的变化并进行相关的操作,使线程与线程之间间接的实现通信。实现线程通信的方法可以通过以下几种方式:
- 基于volatile修饰的共享对象。
- 通过wait/notify机制实现。
- 线程的join()方法。
- 使用synchronized同步关键字。
- 另外也可借助中间件或者数据库做数据共享实现通信等等。
本文主要就通过wait/notify机制进一步分析讲解。
wait/notify
相信各位对于wait/notify应该不会太陌生,他们的主要作用就是用于控制线程之间的等待与唤醒,具体方法作用如下:
- wait():使当前线程进入阻塞状态,并且释放当前线程持有的锁。与sleep()不同的是sleep()不会释放持有的锁。
- notify():唤醒处于阻塞状态下的一个线程。
- notifyAll():唤醒处于阻塞状态下的所有线程。
需要唤醒一个被Object.wait()方法阻塞的线程有两种方法:
- 其他线程调用了同一个对象的notify()/notifyAll()方法。

