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 方法那肯定对象锁。 求解释
|  |      1owenliang      2017-09-28 18:19:07 +08:00  2 你应该读读书。 | 
|      2zgbgx1      2017-09-28 18:23:41 +08:00 | 
|      3alqaz      2017-09-28 18:33:12 +08:00 via Android 锁在 lock 和 unlock 之间。如果 test2 调用了 lock 那么就会,否则,不会 | 
|  |      4haozhang      2017-09-28 18:33:24 +08:00 via iPhone  1 不是调用 test 会锁,进入了临界区域就会锁,从 lock 开始到 unlock 结束,这片区域就是临界区域。 | 
|  |      6misaka19000      2017-09-28 18:51:39 +08:00 via Android Java 好像用的是 monitor 指令吧,一类是加在对象上,另一类好像是不需要加在对象上面的 | 
|      7sunqb      2017-09-28 19:00:37 +08:00 via Android 官方建议使用 synchronized,除非你有新的需求 | 
|  |      8domty      2017-09-28 19:18:31 +08:00 你试试写个测试不就知道了。 如果你 test2()这个方法没有对 aLock 进行加解锁操作的话,不会阻塞。 | 
|  |      11puritania OP | 
|  |      12misaka19000      2017-09-28 20:35:54 +08:00 反编译一下就知道是怎么回事了 | 
|  |      13ihuotui      2017-09-28 20:40:06 +08:00 via iPhone aqs 高级同步队列 |