多线程(Java)|Java循环打印ABC…

import java.util.HashMap; import java.util.Map; /** * 循环打印ABC… * @author 健身小码哥 * */ public class PrintABC { public static void main(String[] args) { new PrinterTask("A").start(); ; new PrinterTask("B").start(); ; new PrinterTask("C").start(); ; } } /** * 打印线程 * @author 健身小码哥 * */ class PrinterTask extends Thread { /** * 当前线程要打印的字符 */ private String value; /** * 标识下一个需要打印的字符,默认从A开始 */ static String nextPrintValue = "https://www.it610.com/article/A"; /** * 保存字符的打印顺序 */ static Map nextValueMap; static { nextValueMap = new HashMap<>(); nextValueMap.put("A", "B"); nextValueMap.put("B", "C"); nextValueMap.put("C", "A"); } PrinterTask(String printValue) { this.value = https://www.it610.com/article/printValue; } @Override public void run() { // TODO Auto-generated method stub super.run(); while(true) { synchronized (nextValueMap) { //获取锁之后,判断自己负责打印的字符与下一个要求打印的字符是否相符,如果相符,打印 if(value.equals(nextPrintValue)) { System.out.println(value); //打印之后,对下一个需要打印的字符进行赋值 nextPrintValue= nextValueMap.get(value); nextValueMap.notifyAll(); }else { try { //如果不相符,等待 nextValueMap.wait(); } catch (InterruptedException e) { // TODO Auto-generated catch block e.printStackTrace(); } } } try { Thread.sleep(1000); } catch (InterruptedException e) { // TODO Auto-generated catch block e.printStackTrace(); } } } }


    推荐阅读