本文研究的主要是Java并發(fā)之傳統(tǒng)線程同步通信技術(shù)的相關(guān)代碼示例,具體介紹如下。
成都創(chuàng)新互聯(lián)公司專注于網(wǎng)站設(shè)計、網(wǎng)站制作、網(wǎng)頁設(shè)計、網(wǎng)站制作、網(wǎng)站開發(fā)。公司秉持“客戶至上,用心服務(wù)”的宗旨,從客戶的利益和觀點出發(fā),讓客戶在網(wǎng)絡(luò)營銷中找到自己的駐足之地。尊重和關(guān)懷每一位客戶,用嚴(yán)謹(jǐn)?shù)膽B(tài)度對待客戶,用專業(yè)的服務(wù)創(chuàng)造價值,成為客戶值得信賴的朋友,為客戶解除后顧之憂。先看一個問題:
有兩個線程,子線程先執(zhí)行10次,然后主線程執(zhí)行5次,然后再切換到子線程執(zhí)行10,再主線程執(zhí)行5次……如此往返執(zhí)行50次。
看完這個問題,很明顯要用到線程間的通信了, 先分析一下思路:首先肯定要有兩個線程,然后每個線程中肯定有個50次的循環(huán),因為每個線程都要往返執(zhí)行任務(wù)50次,主線程的任務(wù)是執(zhí)行5次,子線程的任務(wù)是執(zhí)行10次。線程間通信技術(shù)主要用到wait()
方法和notify()
方法。wait()方法會導(dǎo)致當(dāng)前線程等待,并釋放所持有的鎖,notify()
方法表示喚醒在此對象監(jiān)視器上等待的單個線程。下面來一步步完成這道線程間通信問題。
首先不考慮主線程和子線程之間的通信,先把各個線程所要執(zhí)行的任務(wù)寫好:
public class TraditionalThreadCommunication { public static void main(String[] args) { //開啟一個子線程 new Thread(new Runnable() { @Override public void run() { for (int i = 1; i <= 50; i ++) { synchronized (TraditionalThreadCommunication.class) { //子線程任務(wù):執(zhí)行10次 for (int j = 1;j <= 10; j ++) { System.out.println("sub thread sequence of " + j + ", loop of " + i); } } } } } ).start(); //main方法即主線程 for (int i = 1; i <= 50; i ++) { synchronized (TraditionalThreadCommunication.class) { //主線程任務(wù):執(zhí)行5次 for (int j = 1;j <= 5; j ++) { System.out.println("main thread sequence of " + j + ", loop of " + i); } } } } }