好程式設計師分享大資料教程之執行緒高階部分

好程式設計師IT發表於2019-12-09

 

好程式設計師分享大資料教程之執行緒高階部分,首先講一下執行緒的生命週期

 

對於一個執行緒 在被建立後 不是立即就進入到了執行狀態 也不是一直處於執行狀態 線上程的宣告週期中 一個執行緒會在多種狀態之間進行切換

>

>  

>

> new :  新生狀態 執行緒被例項化 但是還沒有開始執行 (start)

>

> runnable:  就緒狀態 已經執行過 start,  執行緒已經啟動了 只是沒有搶到 CPU 時間片

>

> running:  執行狀態 搶到了 CPU 時間片

>

> blocked:  阻塞狀態 執行緒執行的過程中 遇到一些特殊情況 會進入阻塞狀態 阻塞中的執行緒 是不能引數時間片的搶奪的  ( 不能被執行緒排程器排程 )

>

> dead:  死亡狀態 執行緒終止

>

  正常死亡  : run 方法中的程式碼執行結束

>

  非正常死亡  :  強制使用 stop 方法停止這個執行緒

####  臨界資源問題

 

由於執行緒之間是資源共享的。如果有多個執行緒,同時對一個資料進行操作,此時這個資料會出現問題。

 

如果有一個執行緒在訪問一個臨界資源,在訪問之前,先對這個資源“上鎖”,此時如果有其他的執行緒也需要訪問這個臨界資源,需要先查這個資源有沒有被上鎖,如果沒有被上鎖,此時這個執行緒可以訪問這個資源;如果上鎖了,則此時這個執行緒進入阻塞狀態,等待解鎖。

 

#### 同步程式碼段

 

> ```java

> //  同步程式碼段

> //  小括號:就是鎖

> //  大括號:同步程式碼段,一般情況下,寫需要對臨界資源進行的操作

> synchronized () {

>   

> }

> //  關於同步鎖:可以分成兩種:物件鎖、類鎖

> // 

> ```

>

 

#### 同步方法

 

> ```java

> //  使用 synchronized 關鍵字修飾的方法就是同步方法

> //  將一個方法中所有的程式碼進行一個同步

> //  相當於將一個方法中所有的程式碼都放到一個 synchronized 程式碼段中

> //  同步方法的鎖:

> // 1.  如果這個方法是一個非靜態方法:鎖是 this

> // 2.  如果這個方法是一個靜態方法:鎖是類鎖(當前類 .class

> private synchronized void sellTicket() {

> }

> ```

>

 

#### lock unlock

 

就是一個類 RenntrantLock

 

####  執行緒死鎖 ( 瞭解 )

 

在解決臨界資源問題的時候,我們引入了一個" " 的概念。我們可以用鎖對一個資源進行保護。實際,在多執行緒的環境下,有可能會出現一種情況:

 

假設有 A B 兩個執行緒,其中執行緒 A 持有鎖標記 a ,執行緒 B 持有鎖標記 b ,而此時,執行緒 A 等待鎖標記 b 的釋放,執行緒 B 等待鎖標記 a 的釋放。這種情況,叫做   ** 死鎖 **

 

####  生產者消費者設計模式

 

> wait()  notify()  notifyAll()

>

> wait():  等待。使得當前的執行緒釋放鎖標記,進入等待佇列。可以使當前的執行緒進入阻塞狀態。

>

> notify():  喚醒,喚醒等待佇列中的一個執行緒。

>

> notifyAll():  喚醒,喚醒等待佇列中所有的執行緒。

 

> wait sleep 的區別 :

>

> 1.  兩個方法都可以使一個執行緒進入阻塞。

> 2.  區別: wait 方法會釋放鎖標記, sleep 則不會釋放鎖標記。

#### 懶漢式單例設計模式中的執行緒安全問題

 

####  執行緒池

 

> ThreadPoolExecutor 類是執行緒池最核心的類。這個類的構造方法中的幾個引數:

>

> int corePoolSize:  核心執行緒數量。核心池大小。

>

> int maxmiunPoolSize:  執行緒池中最多的執行緒數量。

>

> long keepAliveTime:  核心執行緒之外的臨時執行緒,能存活的時間。(從這個執行緒空閒的時候開始算)

>

> TimeUnit unit:  上面的時間單位

>

 NANOSECONDS:  納秒

>

 MICROSECONDS:  微秒

>

 MILLISEONDS:  毫秒

>

 SECONDS: 

>

 MINUTES: 

>

 HOURS: 

>

 DAYS: 

>

> BlockingQueue<Runnable> workQueue:  等待佇列

>

 ArrayBlockingQueue

>

 LinkedBlockingQueue

>

  SynchronousQueue

>

> RejectedExecutionHandler handler :拒絕訪問策略

 

預習方向:

 

1.  網路程式設計

2. TCP

3. UDP


來自 “ ITPUB部落格 ” ,連結:http://blog.itpub.net/69913892/viewspace-2667589/,如需轉載,請註明出處,否則將追究法律責任。

相關文章