要求:
java使用3个线程分别打印A、B、C,打印10次后自动退出,输出顺序不能乱
方式1:
public class Main{
public static void main(String[] args) {
AtomicInteger x = new AtomicInteger(0);
final Printer aPrinter = new Printer(x, 'A', 0);
final Printer bPrinter = new Printer(x, 'B', 1);
final Printer cPrinter = new Printer(x, 'C', 2);
new Thread(aPrinter).start();
new Thread(bPrinter).start();
new Thread(cPrinter).start();
}
}
class Printer implements Runnable {
private AtomicInteger x;
private char ch;
private int signal;
private int count;
public Printer(AtomicInteger x, char ch, int signal) {
this.x = x;
this.ch = ch;
this.signal = signal;
}
@Override
public void run() {
while (true) {
// 判断是否该打印
if (x.get() % 3 == signal) {
// 该打印了
System.out.println(ch);
// 将共享控制对象的值+1
x.incrementAndGet();
// 此时可以通知其他线程判断是否需要打印了
try {
synchronized (x) {
x.notifyAll();
}
} catch (Exception e) {
e.printStackTrace();
}
// 线程内部打印计数
count++;
// 判断是否需要退出
if (count == 10) {
break;
}
}
// 不该打印就等待
try {
synchronized (x) {
x.wait();
}
} catch (InterruptedException e) {
e.printStackTrace();
}
}
}
}