如何向A、B两个文件中写数据并且向A、B中写数据是交叉进行的,假定向A中写数据的是A线程,向B中写数据的是B线程,那么可以通过定义一个标识,用来控制A、B线程的交叉效果。
定义输出类
public class FileOutput {
// 定义volatile类型的变量,让多个线程能从公共内存中直接获取值
private volatile boolean printA = false;
public synchronized void printFileToA(){
try{
while(printA){
wait();
}
System.out.println("Print to AAAAAAAA");
printA = true;
notifyAll();
} catch (InterruptedException e){
e.printStackTrace();
}
}
public synchronized void printFileToB(){
try{
while(!printA){
wait();
}
System.out.println("Print to BBBBBBBB");
printA = false;
notifyAll();
} catch (InterruptedException e){
e.printStackTrace();
}
}
}
定义线程类
public class PrintAThread extends Thread {
private FileOutput fileOutput;
public PrintAThread(FileOutput fileOutput){
this.fileOutput = fileOutput;
}
@Override
public void run(){
fileOutput.printFileToA();
}
}
public class PrintBThread extends Thread {
private FileOutput fileOutput;
public PrintBThread(FileOutput fileOutput){
this.fileOutput = fileOutput;
}
@Override
public void run(){
fileOutput.printFileToB();
}
}
测试
public class Test3 {
public static void main(String[] args){
FileOutput fileOutput = new FileOutput();
for(int i = 0; i < 10; i++){
PrintAThread printAThread = new PrintAThread(fileOutput);
PrintBThread printBThread = new PrintBThread(fileOutput);
printAThread.start();
printBThread.start();
}
}
}
结果