多线程问题:使用两个线程交替打印A和B,使用最大打印次数控制,详见代码。
出现的问题是:当运行线程B中的run()方法时,程序没有先while()判断,而是直接进入了while循环体。
/**
* 共享资源:打印机
* @author Tangxkun
*
*/
public class Printer {
//最大打印次数
private final int MAX_COUNT = 7;
//false表示该打印机未打印A,true表示该打印机正在打印A
private boolean printingA = false;
private int count = 0;
public synchronized void printA(){
System.out.print(count++);
printingA = true;
System.out.print("A-");
notifyAll();
}
public synchronized void printB(){
System.out.print(count++);
printingA = false;
System.out.print("B-");
notifyAll();
}
public synchronized void aWaiting() throws InterruptedException{
while(printingA == true){
wait();
}
}
public synchronized void bWaiting() throws InterruptedException{
while(printingA == false){
wait();
}
}
public int getCount() {
return count;
}
public void setCount(int count) {
this.count = count;
}
public int getMAX_COUNT() {
return MAX_COUNT;
}
}
/**
* 打印A的线程
* @author Tangxkun
*
*/
public class PrintA implements Runnable{
private Printer printer;
public PrintA(Printer printer) {
super();
this.printer = printer;
}
@Override
public void run() {
while(printer.getCount() < printer.getMAX_COUNT()){
printer.printA();
try {
printer.aWaiting();
} catch (InterruptedException e) {
// TODO Auto-generated catch block
e.printStackTrace();
}
}
}
}
/**
* 打印B的线程
* @author Tangxkun
*
*/
public class PrintB implements Runnable{
private Printer printer;
public PrintB(Printer printer) {
super();
this.printer = printer;
}
@Override
public void run() {
while(printer.getCount() < printer.getMAX_COUNT()){
try {
printer.bWaiting();
} catch (InterruptedException e) {
// TODO Auto-generated catch block
e.printStackTrace();
}
printer.printB();
}
}
}
/**
* 测试代码
* @author Tangxkun
*
*/
public class Test {
public static void main(String[] args) {
Printer printer = new Printer();
PrintA printA = new PrintA(printer);
PrintB printB = new PrintB(printer);
Thread threadA = new Thread(printA,"A");
Thread threadB = new Thread(printB, "B");
threadA.start();
threadB.start();
}
}
烧脑了半天还是没有找出端倪,所以来请教一下各位大神!