[监视锁-监视者对象模式] synchronized java 同步过程

 

 

超级棒!!https://www.ibm.com/developerworks/cn/java/j-lo-synchronized/index.html

执行序列图

在监视者对象模式中,在参与者之间将发生如下的协作过程:

1、同步方法的调用和串行化。当客户线程调用监视者对象的同步方法时,必须首先获取它的监视锁。只要该监视者对象有其他同步方法正在被执行,获取操作便不会成功。在这种情况下,客户线程将被阻塞直到它获取监视锁。当客户线程成功获取监视锁后,进入临界区,执行方法实现的服务。一旦同步方法完成执行,监视锁会被自动释放,目的是使其他客户线程有机会调用执行该监视者对象的同步方法。

2、同步方法线程挂起。如果调用同步方法的客户线程必须被阻塞或是有其他原因不能立刻进行,它能够在一个监视条件上等待,这将导致该客户线程暂时释放监视锁,并被挂起在监视条件上。

3、监视条件通知。一个客户线程能够通知一个监视条件,目的是为了让一个前期使自己挂起在一个监视条件上的同步方法线程恢复运行。

4、同步方法线程恢复。一旦一个早先被挂起在监视条件上的同步方法线程获取通知,它将继续在最初的等待监视条件的点上执行。在被通知线程被允许恢复执行同步方法之前,监视锁将自动被获取。

 

[监视锁-监视者对象模式] synchronized java 同步过程

 

[监视锁-监视者对象模式] synchronized java 同步过程

获取监视锁----是否需要堵塞,如果是---释放监视锁,线程在监视条件上等待;---收到通知 wait return时,再次自动获取监视锁,执行后面的代码逻辑;

 

 

为什么考察Object类,10个方法???

Java Monitor 从两个方面来支持线程之间的同步,即:互斥执行与协作。 Java 使用对象锁 ( 使用 synchronized 获得对象锁 ) 保证工作在共享的数据集上的线程互斥执行 , 使用 notify/notifyAll/wait 方法来协同不同线程之间的工作。这些方法在 Object 类上被定义,会被所有的 Java 对象自动继承。消除了C++的区域锁和条件变量的概念。

如上:涉及到三个方法(notify/notifyAll/wait)和一个synchronized 原语;共同完成了同步机制的所有;

[监视锁-监视者对象模式] synchronized java 同步过程

 

[监视锁-监视者对象模式] synchronized java 同步过程

 

 

 

 

 

 

相关文章:

  • 2021-09-30
  • 2022-02-08
  • 2022-03-07
  • 2021-10-14
  • 2021-06-06
  • 2021-06-02
  • 2021-06-21
  • 2021-06-26
猜你喜欢
  • 2021-10-22
  • 2021-09-26
  • 2022-02-15
  • 2022-12-23
  • 2022-12-23
  • 2021-07-24
  • 2021-12-13
相关资源
相似解决方案