HJ49 多线程
多线程
http://www.nowcoder.com/questionTerminal/cd99fbc6154d4074b4da0e74224a1582
个人感觉用AtomicInteger写更简单
import java.util.Scanner;
import java.util.concurrent.atomic.AtomicInteger;
public class Main {
public static void main(String[] args) {
Scanner in = new Scanner(System.in);
while (in.hasNextInt()){
int total = in.nextInt()*4;
AtomicInteger count = new AtomicInteger(0);
int runCount = 4;
MyPrinter PrinterA = new MyPrinter("A",0,count,total,runCount);
MyPrinter PrinterB = new MyPrinter("B",1,count,total,runCount);
MyPrinter PrinterC = new MyPrinter("C",2,count,total,runCount);
MyPrinter PrinterD = new MyPrinter("D",3,count,total,runCount);
new Thread(PrinterA).start();
new Thread(PrinterB).start();
new Thread(PrinterC).start();
new Thread(PrinterD).start();
try {
Thread.sleep(100);
} catch (InterruptedException e) {
e.printStackTrace();
}
System.out.println("");
}
}
}
class MyPrinter implements Runnable{
String letter;
int order;
AtomicInteger count;
int total;
int runCount;
public MyPrinter(String letter, int order, AtomicInteger count, int total,int runCount){
this.letter = letter;
this.order = order;
this.count = count;
this.total = total;
this.runCount = runCount;
}
@Override
public void run(){
while(count.get() != total){
synchronized(count){
if(count.get()%runCount == order){
System.out.print(letter);
count.incrementAndGet();
count.notifyAll();
}
else{
try{
count.wait();
}
catch(InterruptedException e){
e.printStackTrace();
}
}
}
}
}
}