[java] 线程的同步
互斥锁
- 每个对象都对应于一个monitor,它上面有一个称为“互斥锁”的标记,这个标记用来保证在任一时刻,只能有一个线程访问该对象
- 关键字synchronized用来与对象的互斥锁联系。
synchronized的用法
- 对代码片段
synchronized(对象){…} - 对某个方法
synchronized放在方法声明中
public synchronized void push(char c){…}
相当于对synchronized(this),表示整个方法为同步方法
线程同步控制
- 使用wait()方法可以释放对象锁
- 使用notify()或notifyAll()可以让等待的一个或所有线程进入就绪状态
- Java里面可以将wait和notify放在synchronized里面,是因为Java是这样处理的:
在synchronized代码被执行期间,线程调用对象的wait()方法,会释放对象锁标志,然后进入等待状态,然后由其它线程调用notify()或者notifyAll()方法通知正在等待的线程
Written on December 10, 2022