Java循环打印ABC…

来源:互联网 发布:高一英语听力软件 编辑:程序博客网 时间:2024/05/29 14:55
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 = "A";/** * 保存字符的打印顺序 */static Map<String,String> nextValueMap;static {nextValueMap = new HashMap<>();nextValueMap.put("A", "B");nextValueMap.put("B", "C");nextValueMap.put("C", "A");}PrinterTask(String printValue){this.value = printValue;}@Overridepublic void run() {// TODO Auto-generated method stubsuper.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 blocke.printStackTrace();}}}try {Thread.sleep(1000);} catch (InterruptedException e) {// TODO Auto-generated catch blocke.printStackTrace();}}}}

原创粉丝点击