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

来源:互联网 发布:淘宝客卖家怎么推广 编辑:程序博客网 时间:2024/05/29 04:13

建立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();                  }              }            }      }  }  

原创粉丝点击