1. 程式人生 > >#圖文詳解:從實際和理論出發,帶你瞭解Java中的多執行緒

#圖文詳解:從實際和理論出發,帶你瞭解Java中的多執行緒

這裡並沒有講什麼新東西,只是把多執行緒一些知識來個總結。大家懂得可以複習複習,還有些童鞋對多執行緒朦朧的可以拿這個做為入門~

舉個栗子說明啥是多執行緒:玩遊戲,前面一堆怪,每個怪都是一個執行緒,你射了一槍,子彈飛出去了,這顆子彈也是一個執行緒。你開啟你的程序管理,看到你遊戲的後臺程序,這就是程序。

一、執行緒建立

這裡友情提示:2、3、4種方法的引數,三種寫法是等效的(new two() <==> ()->{} <==> new Runnable)

如果有想學習java的程式設計師,可來我們的java學習扣qun:79979,2590免費送java的視訊教程噢!我整理了一份適合18年學習的java乾貨,送給每一位想學的小夥伴,並且每天晚上8點還會在群內直播講解Java知識,歡迎大家前來學習哦。

java最簡單粗暴講解多執行緒,還不趕緊上車!

說到這肯定要順便提一下,面試時候愛問的,繼承Thread和實現Runnable的區別。一句話回答:單繼承多實現。

二、鎖(synchronized和Lock)

鎖其實很多,讀寫鎖,分散式鎖,等等。這裡我們就先介紹最常用的2個。

①synchronized,這個單詞是同步的意思。

java最簡單粗暴講解多執行緒,還不趕緊上車!

synchronized: 物件級別。例如:一個類有2個方法,兩個方法都上鎖,因為是物件級別,即使2個執行緒訪問不同方法,一個方法沒有釋放鎖另一個也不能執行,這就是同步。除非另一個方法沒上鎖,那麼該方法就是非同步的。

一個物件一把鎖:synchronized,物件鎖,只對一個物件生效!

static synchronized: 就是類級別的鎖。那麼即使你例項化多個例項,不同執行緒去跑,這個類一次也只允許一個執行緒進來。

②鎖的重入

鎖重入:比如2個方法one、two都加了synchronized,one裡呼叫了two,那麼可以執行two方法(即使one沒有執行完)。繼承也可以用鎖重入。

java最簡單粗暴講解多執行緒,還不趕緊上車!

③Lock lock和synchonizide差不多,但是功能性更強一點。

java最簡單粗暴講解多執行緒,還不趕緊上車!

讀寫鎖意思就是:讀讀共享,讀寫互斥,寫寫互斥。意思是如果兩個方法都是呼叫讀鎖,那麼多執行緒可以併發訪問。但是一個方法呼叫讀方法,一個呼叫寫方法,那麼該鎖就會變成同步鎖(一個方法完了才去執行另一個)。

三、sleep、wait、notify

java最簡單粗暴講解多執行緒,還不趕緊上車!

wait會讓出鎖的控制權,notify會喚醒wait。

notify和sleep的區別:sleep在時間到了會自動喚醒,wait要notify喚醒。

注意:notify不會立即釋放鎖,所以上述例子,會在notify後一秒才釋放鎖。

總結:本節主要介紹了多執行緒、鎖以及執行緒間通訊等基礎知識點。下一節,我要講原子計數器,volatile,countdownLatch,併發集合,併發佇列,執行緒副本等。算是多執行緒的進階吧。