Java之synchronized可重入性的理解

阅读: 评论:0

Java之synchronized可重入性的理解

Java之synchronized可重入性的理解

1  synchronized可重入性的理解

当一个线程试图操作一个由其他线程持有的对象锁的临界资源时,将会处于阻塞状态,但当一个线程再次请求自己持有对象锁的临界资源时,如果当前锁是重入性,会请求将会成功,如果当前锁不是可重入性,会等待当前对象锁的释放,实际上该对象锁已被当前线程所持有,不可能再次获得,就会产生死锁,在java中synchronized是基于原子性的内部锁机制,是可重入的,因此在一个线程调用synchronized方法的同时在其方法体内部调用该对象另一个synchronized方法,也就是说一个线程得到一个对象锁后再次请求该对象锁,是允许的,还有就是当子类继承父类时,子类也是可以通过可重入锁调用父类的同步方法,这就是synchronized的可重入性。
 

 

 

 

 

 

 

 

 

2  测试synchronized方法调用synchronized方法

1)代码

import java.io.*;class Parent    {public synchronized void willDo()    {System.out.println("我是父类的方法");}
}class Child extends Parent {@Overridepublic synchronized void willDo() {super.willDo();System.out.println("我是子类方法");}public static void main(String[] args) {Child child = new Child();child.willDo();}
}

 

 

2)运行结果

我是父类的方法
我是子类方法

 

 

 

 

 

 

 

 

3 测试子类synchronized方法调用父类synchronized方法

1)代码

class Test implements Runnable    {static Test instance = new Test();static int i=0;static int j=0;@Overridepublic void run() {for(int j = 0; j < 10; j++) {//当前实例对象锁synchronized(this){i++;willDo();}}}public synchronized void willDo()    {j++;}public static void main (String[] args) throws java.lang.Exception    {Thread t1 = new Thread(instance);t1.start();t1.join();System.out.println(i);}
}

 

2)运行结果

10

 

本文发布于:2024-02-01 13:53:29,感谢您对本站的认可!

本文链接:https://www.4u4v.net/it/170676680937065.html

版权声明:本站内容均来自互联网,仅供演示用,请勿用于商业和其他非法用途。如果侵犯了您的权益请与我们联系,我们将在24小时内删除。

留言与评论(共有 0 条评论)
   
验证码:

Copyright ©2019-2022 Comsenz Inc.Powered by ©

网站地图1 网站地图2 网站地图3 网站地图4 网站地图5 网站地图6 网站地图7 网站地图8 网站地图9 网站地图10 网站地图11 网站地图12 网站地图13 网站地图14 网站地图15 网站地图16 网站地图17 网站地图18 网站地图19 网站地图20 网站地图21 网站地图22/a> 网站地图23