线程一执行的代码:
public void run() {
synchronized(a) { // 持有对象锁a,等待对象锁b
synchronized(b) {
编写锁定的代码
}
}
}
线程二执行的代码:
public void run() {
synchronized(b) { // 持有对象锁b,等待对象锁a
synchronized(a) {
编写锁定的代码
}
}
}
注意:
在以后的开发中,尽量减少同步的资源,减少同步代码块的嵌套结构的使用
线程一执行的代码:
public void run() {
synchronized(a) { // 持有对象锁a,等待对象锁b
synchronized(b) {
编写锁定的代码
}
}
}
线程二执行的代码:
public void run() {
synchronized(b) { // 持有对象锁b,等待对象锁a
synchronized(a) {
编写锁定的代码
}
}
}
注意:
在以后的开发中,尽量减少同步的资源,减少同步代码块的嵌套结构的使用