【多线程协作打印 (完美世界2017秋招真题)】建立m个线程,每个线程只能打印一种字符,要求线程同时运行,交替打印n次字符。
比如: n=3 m=2打印字符为A和B。要求线程1打印3次A,线程2打印3次B,在屏幕输出ABABAB
注意: 需要检查输入有效性,遇到错误输入时,请打印error并安全退出。
import java.util.Scanner;
public class Main {
public static int count = 0;
public static void main(String args[]) {
Scanner sc = new Scanner(System.in);
int n;
String s;
while (sc.hasNextInt()) {
n = sc.nextInt();
s = sc.next();
if (!(n + "").matches("\\+?[1-9][0-9]*") || s == null
|| s.length() <= 0) {
System.out.println("error");
return;
} else {
Object ob = new Object();
for (int i = 0;
i < s.length();
i++) {
new MyThread(s.charAt(i), i, s.length(), ob).start();
}
}
}
} static class MyThread extends Thread {
char c;
int index;
int length;
Object ob;
public MyThread(char c, int index, int length, Object ob) {
this.c = c;
this.index = index;
this.length = length;
this.ob = ob;
}@Override
public void run() {
print();
}public void print() {
synchronized (ob) {
for (int i = 0;
i < length;
i++) {
while (count % length != index) {
try {
ob.wait();
} catch (InterruptedException e) {
e.printStackTrace();
}
}
System.out.print(c);
count++;
ob.notifyAll();
}
}}
}
}