前言:多线程问题是平时工作中的常见问题,也是面试的常考问题.如果你也有遇到多线程交替执行任务的需求,不妨看看这篇文章
一、题目描述
建立三个线程A、B、C,A线程打印字符"A", B线程打印字符“B”,C线程打印字符"C" ,三个线程交替打印100次。
分析: 该问题属于一个多线程的系统设计问题, 网上的方案很多,但是要做到面试官眼睛一亮,还是需要下些功夫。
二、synchronized + Notify实现
统计使用synchronized同步代码块和wait、notify的方法控制三个线程的执行次序。
思路 : 三个线程抢占一个Object对象锁,每次抢占锁之后,检测当前的执行顺序是否与期望顺序匹配,不匹配则是否锁,重复抢锁过程。
public class SyncTest1 {
public static final int max = 30;
public static Object lock = new Object();
public static int count = 1;
public static void main(String[] args) throws InterruptedException {
long curTime = System.currentTimeMillis();
MyTask task1 = new MyTask(0, "A");
MyTask task2 = new MyTask(1, "B");
MyTask task3 = new MyTask(2, "C");
Threa