當前位置:
首頁 > 最新 > 多線程中的兩個問題探討

多線程中的兩個問題探討

問題提出

問題1 多線程中如何保證主線程等待所有子線程運行完畢再執行?

問題2 多個線程同時對一個資源文件進行讀/寫操作,是如何保證有序進行的呢?

解答思路及源碼

對於第一個問題,我想了兩種方法。下面就進行介紹吧。

第一種方法採用join()

第二種方法採用JUC包中的倒計時器CountDownLatch和信號量Semaphore工具類實現

輸出結果

Thread 1 Enter

Thread 1 Out

Thread 2 Enter

Thread 2 Out

Thread 3 Enter

Thread 3 Out

Main Thread

第二個問題,思路是線程間的通信原理,可以使用等待/喚醒機制wait/notify notifyAll 或者鎖Lock的await/signal實現。主要是存在一個共享文件的鎖的同步。

例如:有兩個線程同時讀或寫操作一個txt文件,假設我們考慮2個寫線程

線程1 :寫入 hello world

線程2 :寫入 concurrent thread

保證線程1和線程2是交替執行,寫入到hello.txt文件中。

步驟1 先創建一個WRFile類,包含2個方法write1(),write2()

步驟2 創建新建2個線程類,FirstThread,SecondThread。一個線程專門寫入hello world,另一個線程專門寫入 concurrent thread

步驟3 編寫一個Main函數,創建2個線程對象和一個WRFile對象,同時他們共享同一個WRFile對象鎖

最後 啟動2個線程。

輸出結果:

hello world

concurrent thread

hello world

concurrent thread

總結:

java中的多線程是難掌握的一項技術,只有多加練習和深入源碼剖析才能掌握它的精髓,其次還要看書,理解它的原理。

參考書目

1zhangpan_soft博客http://blog.csdn.net/zhangpan_soft/article/details/52415238

2飄楊……博客 https://www.cnblogs.com/tony-yang-flutter/p/3506421.html

3Doug Lea Java並發編程實現 機械工業出版社


喜歡這篇文章嗎?立刻分享出去讓更多人知道吧!

本站內容充實豐富,博大精深,小編精選每日熱門資訊,隨時更新,點擊「搶先收到最新資訊」瀏覽吧!


請您繼續閱讀更多來自 dengyu的博客 的精彩文章:

TAG:dengyu的博客 |