回覆列表
-
1 # 淺析架構
-
2 # 程式設計師Dong哥的雜貨鋪
Java中透過Thread實現多執行緒有兩種方式:
第一種是建立Thread的子類並覆蓋它的run()方法;
第二種是實現Runnable(java.lang.Runnable)介面,並將它傳給Thread類的建構函式。
1. Thread子類實現方式:
您也可以使用匿名子類的方式實現:
2. 實現Runnable介面的方式:
這裡有3種方式:
1)Java類實現Runnable
2)匿名實現Runnable
3)Lambda表示式實現Runnable
1.回答下你的問題,繼承Thread類並呼叫start方法就可以實現多執行緒了。
其實Java中實現多執行緒的方式有三種方式繼承 Thread類,實現Runnable介面、實現Callable介面。
前兩種沒有返回值,後一種帶返回值。說到多執行緒就把執行緒相關的都說下。
2、什麼是執行緒
程序是指一個記憶體中執行的應用程式,每個程序都有自己獨立的一塊記憶體空間,而多個執行緒共享程序申請的記憶體。
一個程序中可以啟動多個執行緒。比如java執行一個程式就會啟動一個程序,程序至少會啟動main執行緒和垃圾回收執行緒。
執行緒總是屬於某個程序,與程序內的其他執行緒一起共享分配給該程序的所有資源,但是執行緒有自己獨立的棧。
Java的執行緒又分為普通執行緒和守護執行緒,像垃圾回收執行緒就是守護執行緒。
3、執行緒的狀態
new:執行緒物件已經建立,還沒有呼叫start方法;
runnable start0方法呼叫時,執行緒進入該狀態。 wait/block/sleep/running也會轉到該狀態;
running runnable的執行緒執行就會進入該狀態
休眠狀態:包括wait/blocksleep,執行緒因為某個條件不再執行了,但是等待某個件事件出現,可能返回到 runnable狀態
dead:異常或者run方法執行完成達到的狀態
4、執行緒同步
既然是多執行緒,就要注意執行緒安全問題。
解決執行緒安全問題,就需要加鎖。Java提供了 synchronized和lock來實現執行緒同步的問題(Lock的實現這裡就不說了,後面可以分享下)。
5、執行緒通訊
Object的wait/notify方法,Condition的await和signal方法, BlockingQueue的實現類,
concurrent包下面的Semaphore、 CyclicBarrier CountDownLatch都可以實現執行緒通訊,這裡就不詳解了
6、執行緒池
執行緒池可以參考我分享的關於 ThreadPoolExecutor的文章
7、其他
ThreadLocal volatile這兩個東西也是執行緒使用經常需要的,大家可以瞭解下