开启3个线程,这3个线程的ID分别为A、B、C,
* 每个线程将自己的ID在屏幕上打印10遍,要求输出结果必须按ABC的顺序显示;
* 如:ABCABC….依次递推。
序输出ABC用synchronized的代码实现
/**
* create by spy on 2018/5/31
*/
public class ThreadShunXuPrint {
public static void main(String[] args) {
Object obj = new Object();
for (int i = 0; i < 3; i++) {
new Thread(new printThread(obj, "" + (char) (i + 65), i, 121)).start();
}
}
static class printThread implements Runnable {
private static Object object;//线程加锁对象
private String threadName;//线程名称要打印的字母
private int threadId;//线程指定的下标ID
private static int count = 0;//已打印次数
private Integer totalCount = 0;//总打印次数
public printThread(Object object, String threadName, int threadId, Integer totalCount) {
this.object = object;
this.threadName = threadName;
this.threadId = threadId;
this.totalCount = totalCount;
}
@Override
public void run() {
synchronized (object) {//判断该资源是否正在被使用
while (count < totalCount) {
if (count % 3 == threadId) {
//判断当前已打印次取余线程数相等打印否则等待
System.out.println(threadName);
count++;
object.notifyAll();
} else {
try {
object.wait();
} catch (Exception e) {
System.out.println("线程" + threadName + "打断了!");
e.printStackTrace();
}
}
}
}
}
}
}