有几句代码如下:synchronized (a) { 
   synchronized (b) { 
     a.add(-amount); 
     b.add(amount); 
 } 

我想问下,如果某个线程A在执行这段代码时,这个系统是一定是先锁定a资源让将其使用权限唯一地分配给该线程,然后按顺序再将b的使用权限分配给该线程吗?
一定是先a后b吗?有没有可能是先b后a呢??比如说a已经被占用了,而另一个线程B运行到此处时就支持分配得b呢?这样对于B来说就是先b后a了?如何证明该分配顺序呢??

解决方案 »

  1.   

    一定是先a后b吗? 
    是的.
    如何证明该分配顺序呢??
    synchronized (a) { 
       synchronized (b) { 
         a.add(-amount); 
         b.add(amount); 
     } 

    上边红色的代码就是synchronized (a){..}中的一条语句.要执行synchronized (a){..}中的语句,当然首先要获取到a的对象锁,才有可能进入到内部,执行当中的语句.
      

  2.   

    不一定非是先a后b 
    b是a的子线程 
    可以先运行子线程 在运行主线程的