大資料之執行緒高階部分
好程式設計師大資料培訓之執行緒高階部分,首先講一下執行緒的生命週期
> 對於一個執行緒 , 在被建立後 , 不是立即就進入到了執行狀態 , 也不是一直處於執行狀態 , 線上程的宣告週期中 , 一個執行緒會在多種狀態之間進行切換
>
>
>
> 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-2679642/,如需轉載,請註明出處,否則將追究法律責任。
相關文章
- 好程式設計師分享大資料教程之執行緒高階部分程式設計師大資料執行緒
- JUC執行緒高階---執行緒控制通訊Condition執行緒
- 《Java 高階篇》七:執行緒和執行緒池Java執行緒
- Java 高階 --- 多執行緒快速入門Java執行緒
- JavaSE高階程式設計之多執行緒Java程式設計執行緒
- 【Python3學習筆記】之【Python高階——多執行緒】Python筆記執行緒
- java高階用法之:繫結CPU的執行緒Thread-AffinityJava執行緒thread
- Java多執行緒之進階篇Java執行緒
- 好程式設計師大資料學習路線分享大資料之執行緒程式設計師大資料執行緒
- 6.JUC執行緒高階-Lock同步鎖執行緒
- 執行緒控制之休眠執行緒執行緒
- 多執行緒系列之 執行緒安全執行緒
- 二. 執行緒管理之執行緒池執行緒
- iOS 多執行緒之執行緒安全iOS執行緒
- Java多執行緒之執行緒中止Java執行緒
- Android多執行緒之執行緒池Android執行緒
- springboot配置執行緒池使用多執行緒插入資料Spring Boot執行緒
- 深入淺出執行緒池+高階選項的使用執行緒
- 多執行緒與高併發(二)執行緒安全執行緒
- java執行緒之守護執行緒和使用者執行緒Java執行緒
- Android 進階 ———— Handler系列之建立子執行緒HandlerAndroid執行緒
- Java執行緒池進階Java執行緒
- 進階Java多執行緒Java執行緒
- Nginx 高階篇(十)並行 併發 單執行緒(廢話篇 )Nginx並行執行緒
- redis高階部分Redis
- Java執行緒池和Spring非同步處理高階篇Java執行緒Spring非同步
- java多執行緒之執行緒的基本使用Java執行緒
- JUC之Exchanger-多執行緒與高併發執行緒
- 03—執行時資料區概述及執行緒執行緒
- 多執行緒與高併發(一)多執行緒入門執行緒
- Java多執行緒之守護執行緒實戰Java執行緒
- 併發與多執行緒之執行緒安全篇執行緒
- 多執行緒之間通訊及執行緒池執行緒
- Java多執行緒之執行緒同步【synchronized、Lock、volatitle】Java執行緒synchronized
- Java進階05 多執行緒Java執行緒
- java進階(38)--執行緒安全Java執行緒
- python進階(9)多執行緒Python執行緒
- (MFC)子執行緒的資料如何傳遞給主執行緒中?執行緒