完美世界笔试--多线程协作打印

建立m个线程,每个线程只能打印一种字符,要求线程同时运行,交替打印n次字符。

比如: n=3 m=2打印字符为A和B。要求线程1打印3次A,线程2打印3次B,在屏幕输出ABABAB

注意: 需要检查输入有效性,遇到错误输入时,请打印error并安全退出


样例输入

2  ABC

样例输出

ABCABC

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 lock = new Object();  
                for (int i = 0; i < s.length(); i++) {  
                    new MyThread(s.charAt(i), i, s.length(), lock,n).start();  
                }  
            }  
        }  
    }  
  
    static class MyThread extends Thread {  
        char c;  
        int index;  
        int length;  
        Object lock;
        int n;
  
        public MyThread(char c, int index, int length, Object lock,int n) {  
            this.c = c;  
            this.index = index;  
            this.length = length;  
            this.lock = lock; 
            this.n = n;
        }  
  
        @Override  
        public void run() {  
            print();  
        }  
  
        public void print() {  
            synchronized (lock) {  
                for (int i = 0; i < n; i++) {  
                    while (count % length != index) {  
                        try {  
                            lock.wait();  
                        } catch (InterruptedException e) {  
                            e.printStackTrace();  
                        }  
                    }  
                    System.out.print(c);  
                    count++;  
                    lock.notifyAll();  
                }  
            }  
  
        }  
    }  
}  

你可能感兴趣的:(完美世界笔试--多线程协作打印)