廣州網(wǎng)站建設(shè)哪家好楓樹seo
不瞞大家說,這是之前參加阿里一面的手寫編程題,平時不刷題,這個當(dāng)時花的時間比較多,雖然最后用了很嘍比方法寫出來了,自己還是很不滿意。下面實話也是看了其他大佬的思路,今天重新練了下。
假設(shè)有3個線程,依次打印A、B、C,按順序循環(huán)打印100次。
這個其實是線程通信,如果只是按順序執(zhí)行,用只有一個線程的線程池,依次提交線程任務(wù)就行,但是這里還不是每個線程只執(zhí)行一次,需要循環(huán)重復(fù)打印。
這里有兩種處理方式,一種是搞個全局int變量,對線程數(shù)取模,得到0~2,再轉(zhuǎn)ASCII碼。一種是3個線程按照創(chuàng)建時的順序嚴(yán)格執(zhí)行。
第一種思路寫法:
這里只用到了原生的阻塞喚醒方法,線程競爭獲取鎖,確保同時只有一個線程累加countIndex和打印,3個線程的執(zhí)行順序就不是創(chuàng)建的順序,而是隨機(jī)的。
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