[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