package com.freeflying.thread.sync;
//死循环
public class SyncMethodDeadLock {
public static void main(String[] args) {
SyncMethodDeadLockEx syncMethodDeadLockEx=new SyncMethodDeadLockEx();
SyncMethodDeadLockExA syncMethodDeadLockExA=new SyncMethodDeadLockExA(syncMethodDeadLockEx);
syncMethodDeadLockExA.setName("A");
syncMethodDeadLockExA.start();
SyncMethodDeadLockExB syncMethodDeadLockExB=new SyncMethodDeadLockExB(syncMethodDeadLockEx);
syncMethodDeadLockExB.setName("B");
syncMethodDeadLockExB.start();
}
}
class SyncMethodDeadLockEx{
synchronized public void methodA() {
System.out.println("methodA begin");
boolean isContinueRun=true;
while(isContinueRun) {
}
System.out.println("methodA end");
}
synchronized public void methodB() {
System.out.println("methodB begin");
System.out.println("methodB end");
}
}
class SyncMethodDeadLockExA extends Thread{
private SyncMethodDeadLockEx syncMethodDeadLockEx;
public SyncMethodDeadLockExA(SyncMethodDeadLockEx syncMethodDeadLockEx) {
this.syncMethodDeadLockEx=syncMethodDeadLockEx;
}
@Override
public void run() {
syncMethodDeadLockEx.methodA();
}
}
class SyncMethodDeadLockExB extends Thread{
private SyncMethodDeadLockEx syncMethodDeadLockEx;
public SyncMethodDeadLockExB(SyncMethodDeadLockEx syncMethodDeadLockEx) {
this.syncMethodDeadLockEx=syncMethodDeadLockEx;
}
@Override
public void run() {
syncMethodDeadLockEx.methodB();
}
}
结果:methodA begin 然后一直在这里
package com.freeflying.thread.sync;
//使用同步代码块来解决上面死循环
public class SyncMethodDeadLock {
public static void main(String[] args) {
SyncMethodDeadLockEx syncMethodDeadLockEx = new SyncMethodDeadLockEx();
SyncMethodDeadLockExA syncMethodDeadLockExA = new SyncMethodDeadLockExA(syncMethodDeadLockEx);
syncMethodDeadLockExA.setName("A");
syncMethodDeadLockExA.start();
SyncMethodDeadLockExB syncMethodDeadLockExB = new SyncMethodDeadLockExB(syncMethodDeadLockEx);
syncMethodDeadLockExB.setName("B");
syncMethodDeadLockExB.start();
}
}
class SyncMethodDeadLockEx {
Object object = new Object();
public void methodA() {
synchronized (object) {
System.out.println("methodA begin");
boolean isContinueRun = true;
while (isContinueRun) {
}
System.out.println("methodA end");
}
}
Object object2 = new Object();
synchronized public void methodB() {
synchronized (object2) {
System.out.println("methodB begin");
System.out.println("methodB end");
}
}
}
class SyncMethodDeadLockExA extends Thread {
private SyncMethodDeadLockEx syncMethodDeadLockEx;
public SyncMethodDeadLockExA(SyncMethodDeadLockEx syncMethodDeadLockEx) {
this.syncMethodDeadLockEx = syncMethodDeadLockEx;
}
@Override
public void run() {
syncMethodDeadLockEx.methodA();
}
}
class SyncMethodDeadLockExB extends Thread {
private SyncMethodDeadLockEx syncMethodDeadLockEx;
public SyncMethodDeadLockExB(SyncMethodDeadLockEx syncMethodDeadLockEx) {
this.syncMethodDeadLockEx = syncMethodDeadLockEx;
}
@Override
public void run() {
syncMethodDeadLockEx.methodB();
}
}
结果:
methodA begin
methodB begin
methodB end