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;
}
@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();
}
}
}
}
Java循环打印ABC…
最新推荐文章于 2024-03-30 06:40:09 发布