public class DBTools { volatile private boolean prevIsA = false; synchronized public void backupA() { try { while (prevIsA == true) { wait(); } for (int i = 0; i < 5; i++) { System.out.println("A线程备份★★★★★"); } prevIsA = true; notifyAll(); } catch (InterruptedException e) { e.printStackTrace(); } } synchronized public void backupB() { try { while (prevIsA == false) { wait(); } for (int i = 0; i < 5; i++) { System.out.println("B线程备份☆☆☆☆☆"); } prevIsA = false; notifyAll(); } catch (InterruptedException e) { e.printStackTrace(); } } }
public class BackupA extends Thread { private DBTools dbtools; public BackupA(DBTools dbtools) { super(); this.dbtools = dbtools; } @Override public void run() { dbtools.backupA(); } }
public class BackupB extends Thread { private DBTools dbtools; public BackupB(DBTools dbtools) { super(); this.dbtools = dbtools; } @Override public void run() { dbtools.backupB(); } }
public class Run { public static void main(String[] args) throws InterruptedException { DBTools dbtools = new DBTools(); for (int i = 0; i < 20; i++) { BackupB output = new BackupB(dbtools); output.start(); Thread.sleep(500); BackupA input = new BackupA(dbtools); input.start(); } } }