package com.freeflying.thread.communication;
public class CrossBackup {
public static void main(String[] args) {
CrossBackupEx crossBackupEx=new CrossBackupEx();
for (int i = 0; i < 10; i++) {
CrossBackupA backupA=new CrossBackupA(crossBackupEx);
backupA.start();
CrossBackupB backupB=new CrossBackupB(crossBackupEx);
backupB.start();
}
}
}
class CrossBackupEx{
volatile private boolean currentIsA=false;//让这个标记变量在线程间可见
synchronized public void backupA() {
try {
while(currentIsA==true) {
wait();
}
for (int i = 0; i < 2; i++) {
System.out.println("aaaaaaaa");
}
currentIsA=true;
notifyAll();
} catch (Exception e) {
}
}
synchronized public void backupB() {
try {
while(currentIsA==false) {
wait();
}
for (int i = 0; i < 2; i++) {
System.out.println("bbbbbbbb");
}
currentIsA=false;
notifyAll();
} catch (Exception e) {
}
}
}
class CrossBackupA extends Thread{
private CrossBackupEx crossBackupEx;
public CrossBackupA(CrossBackupEx crossBackupEx) {
this.crossBackupEx=crossBackupEx;
}
@Override
public void run() {
crossBackupEx.backupA();
}
}
class CrossBackupB extends Thread{
private CrossBackupEx crossBackupEx;
public CrossBackupB(CrossBackupEx crossBackupEx) {
this.crossBackupEx=crossBackupEx;
}
@Override
public void run() {
crossBackupEx.backupB();
}
}
结果
aaaaaaaa
aaaaaaaa
bbbbbbbb
bbbbbbbb
aaaaaaaa
aaaaaaaa
bbbbbbbb
bbbbbbbb