网站建设哪里去学营销推广策略有哪些
不瞒大家说,这是之前参加阿里一面的手写编程题,平时不刷题,这个当时花的时间比较多,虽然最后用了很喽比方法写出来了,自己还是很不满意。下面实话也是看了其他大佬的思路,今天重新练了下。
假设有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