public class AService {
private BService bService;
public synchronized void a1(){
System.out.println("This is a1");
try {
TimeUnit.SECONDS.sleep(1);
} catch (InterruptedException e) {
e.printStackTrace();
}
bService.b1();
}
public synchronized void a2(){
System.out.println("This is a2");
try {
TimeUnit.SECONDS.sleep(1);
} catch (InterruptedException e) {
e.printStackTrace();
}
bService.b2();
}
public void setbService(BService bService) {
this.bService = bService;
}
}
public class BService {
private AService aService;
public synchronized void b1(){
System.out.println("This is b1");
try {
TimeUnit.SECONDS.sleep(1);
} catch (InterruptedException e) {
e.printStackTrace();
}
aService.a1();
}
public synchronized void b2(){
System.out.println("This is b2");
try {
TimeUnit.SECONDS.sleep(1);
} catch (InterruptedException e) {
e.printStackTrace();
}
aService.a2();
}
public void setaService(AService aService) {
this.aService = aService;
}
}
**
* 死锁实现
*/
public class Test {
public static void main(String[] args) {
AService aService = new AService();
BService bService = new BService();
aService.setbService(bService);
bService.setaService(aService);
new Thread(aService::a1).start();
new Thread(aService::a2).start();
new Thread(bService::b1).start();
new Thread(bService::b2).start();
}
}