- 首页 > it技术 > >
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();
}
}
}
}
推荐阅读