有几句代码如下:synchronized (a) {
synchronized (b) {
a.add(-amount);
b.add(amount);
}
}
我想问下,如果某个线程A在执行这段代码时,这个系统是一定是先锁定a资源让将其使用权限唯一地分配给该线程,然后按顺序再将b的使用权限分配给该线程吗?
一定是先a后b吗?有没有可能是先b后a呢??比如说a已经被占用了,而另一个线程B运行到此处时就支持分配得b呢?这样对于B来说就是先b后a了?如何证明该分配顺序呢??
synchronized (b) {
a.add(-amount);
b.add(amount);
}
}
我想问下,如果某个线程A在执行这段代码时,这个系统是一定是先锁定a资源让将其使用权限唯一地分配给该线程,然后按顺序再将b的使用权限分配给该线程吗?
一定是先a后b吗?有没有可能是先b后a呢??比如说a已经被占用了,而另一个线程B运行到此处时就支持分配得b呢?这样对于B来说就是先b后a了?如何证明该分配顺序呢??
是的.
如何证明该分配顺序呢??
synchronized (a) {
synchronized (b) {
a.add(-amount);
b.add(amount);
} }
上边红色的代码就是synchronized (a){..}中的一条语句.要执行synchronized (a){..}中的语句,当然首先要获取到a的对象锁,才有可能进入到内部,执行当中的语句.
b是a的子线程
可以先运行子线程 在运行主线程的