java synchronized同步方法调用另一个同步方法,锁机制问题
来源:互联网 发布:js上一页下一页代码 编辑:程序博客网 时间:2024/04/25 03:37
要明白两个问题,1.锁的对象是谁,2.谁持有了锁。
假设方法A和B是在同一个类Test中的两个方法。
Test t=new Test();
t.methodB();
这个时候,methodB方法被调用时,因为加了synchronized ,需要先获得一个锁,这个锁的对象应该是t,也就是当前的这个Test类的实例,而获得锁的东西是线程,也就是说当前线程拿到了t的锁(而不是你说的B方法获得锁),这个时候B方法内调用methodA,因为A也加了synchronized,也需要获得一个锁,因为A和B都是Test类中的方法,所以当前线程要获得的锁的对象也是t。由于当前线程在执行B方法时已经持有了t对象的锁,因此这时候调用methodA是没有任何影响的,相当于方法A上没有加synchronized。
另一种情况:假设现在有两个Test类
Test t1=new Test();
Test t2=new Test();
t1.methodB();//此时当前线程持有了t1对象的锁
t2.methodB();//此时当前线程也持有了t2对象的锁
当前线程持有了两把锁,锁的对象分别是两个不同的Test类的实例t1和t2,互相没有影响。
假设方法A和B是在同一个类Test中的两个方法。
Test t=new Test();
t.methodB();
这个时候,methodB方法被调用时,因为加了synchronized ,需要先获得一个锁,这个锁的对象应该是t,也就是当前的这个Test类的实例,而获得锁的东西是线程,也就是说当前线程拿到了t的锁(而不是你说的B方法获得锁),这个时候B方法内调用methodA,因为A也加了synchronized,也需要获得一个锁,因为A和B都是Test类中的方法,所以当前线程要获得的锁的对象也是t。由于当前线程在执行B方法时已经持有了t对象的锁,因此这时候调用methodA是没有任何影响的,相当于方法A上没有加synchronized。
另一种情况:假设现在有两个Test类
Test t1=new Test();
Test t2=new Test();
t1.methodB();//此时当前线程持有了t1对象的锁
t2.methodB();//此时当前线程也持有了t2对象的锁
当前线程持有了两把锁,锁的对象分别是两个不同的Test类的实例t1和t2,互相没有影响。
- java synchronized同步方法调用另一个同步方法,锁机制问题
- Java同步方法synchronized
- java--同步方法(synchronized)
- 同步方法调用另一个同步方法的锁
- 【java performance】不要在循环中调用synchronized(同步)方法
- java---synchronized同步机制
- Java同步机制--synchronized
- Java synchronized同步机制
- java同步机制:synchronized
- java同步机制:synchronized
- Java 同步机制 synchronized
- java同步机制 synchronized
- java同步机制 synchronized
- java同步机制 synchronized
- Java同步机制synchronized
- java同步机制 synchronized
- java同步机制synchronized
- java同步机制 synchronized
- PostGresql
- Android ADB原理(1)---ADB enable/disable
- HTTP协议详解
- SQL Function
- MyEclipse 8.5配置默认工作空间
- java synchronized同步方法调用另一个同步方法,锁机制问题
- C++容器的一些总结
- 关于MyEclipse找不到AWTUtilities的问题
- 字符设备驱动程序之按键——同步互斥阻塞
- 项目 JunitTest来测试jpa时候搭建完成
- 分享100佳精美的作品集网站设计案例
- 斯坦佛编程教程-Unix编程工具(二)
- myeclipse引入工程后运行出错
- makefile中库的顺序问题