1. 程式人生 > >java最簡單粗暴講解多執行緒,還不趕緊上車!

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

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

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

一、執行緒建立

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

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

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

二、鎖(synchronized和Lock)

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

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

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

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

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

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

②鎖的重入

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

小編在這裡給大家推薦一個java學習群:818464711,進群找管理可以領取免費系統學習資料,以及每天可以免費去聽直播java教學,歡迎小白和進階中的朋友!

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

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

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

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

三、sleep、wait、notify

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

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

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

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

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