
public class a{ private aLock = new ReentrantLock(); public void test(){ aLock.lock(); try{ this.test2() }finally{ aLock.unlock(); } } public void test2(){ ... } } 多个线程持有同一个 a 对象 当一个线程调用 test 方法锁定的同时 另一个线程调用 test2 方法会阻塞吗? 我有点没明白这个锁到底算是加在哪的,如果是 synchronized 方法那肯定对象锁。 求解释
1 owenliang Sep 28, 2017 你应该读读书。 |
2 zgbgx1 Sep 28, 2017 |
3 alqaz Sep 28, 2017 via Android 锁在 lock 和 unlock 之间。如果 test2 调用了 lock 那么就会,否则,不会 |
4 haozhang Sep 28, 2017 via iPhone 不是调用 test 会锁,进入了临界区域就会锁,从 lock 开始到 unlock 结束,这片区域就是临界区域。 |
6 misaka19000 Sep 28, 2017 via Android Java 好像用的是 monitor 指令吧,一类是加在对象上,另一类好像是不需要加在对象上面的 |
7 sunqb Sep 28, 2017 via Android 官方建议使用 synchronized,除非你有新的需求 |
8 domty Sep 28, 2017 你试试写个测试不就知道了。 如果你 test2()这个方法没有对 aLock 进行加解锁操作的话,不会阻塞。 |
11 puritania OP |
12 misaka19000 Sep 28, 2017 反编译一下就知道是怎么回事了 |
13 ihuotui Sep 28, 2017 via iPhone aqs 高级同步队列 |