假设有3个线程,依次打印A、B、C,按顺序循环打印100次。
这个其实是线程通信,如果只是按顺序执行,用只有一个线程的线程池,依次提交线程任务就行,但是这里还不是每个线程只执行一次,需要循环重复打印。
这里有两种处理方式,一种是搞个全局int变量,对线程数取模,得到0~2,再转ASCII码。一种是3个线程按照创建时的顺序严格执行。
第一种思路写法:
这里只用到了原生的阻塞唤醒方法,线程竞争获取锁,确保同时只有一个线程累加countIndex和打印,3个线程的执行顺序就不是创建的顺序,而是随机的。
public class ThreeThreadPrintOrderlyBySync {private static final Object LOCK = new Object();private static volatile int countIndex = 0;private static final int MAX = 100;private static final int WORKER_COUNT = 3;public static void main(String[] args) {Thread thread1 = new Thread(new Worker(0));Thread thread2 = new Thread(new Worker(1));Thread thread3 = new Thread(new Worker(2));thread1.start();thread2.start(