好程式設計師大資料學習路線分享多執行緒學習筆記
好程式設計師大資料學習路線分享 多執行緒 學習筆記, 預設情況下, 主執行緒和垃圾回收執行緒都是由系統建立的 , 但是我們需要完成自己的功能 ---- 建立自己的執行緒物件 。
* java 將執行緒物件導向了 , 形成的類就是 Thread, 在 Thread 類內部執行任務的方法叫 run()
*
* 注意 : 如果想讓 run 作為任務區 , 必須讓他去被自動呼叫 . 我們透過執行 start() 方法 , 來開啟執行緒 , 繼而實現 run 方法的自動呼叫 .
## 直接使用 Thread 建立執行緒物件
// // 分析 : 由於我們實現的實際功能 Thread 類是決定不了的 , 所以沒有辦法將我們的功能放入 Thread 的 run 方法裡
// // 所以 Thread 的 run 方法是一個空方法 . 如果我們想實現自己的功能 , 可以寫 Thread 類的子類 , 重寫 run 方法
當我們手動呼叫run 的時候 , 他失去了任務區的功能 , 變成了一個普通的方法 .
// 當 run 作為一個普通方法時 , 內部對應的執行緒跟呼叫他的位置保持一致 .
## 鎖的條件 :
* 1. 鎖必須是物件 普通的物件 /this/ 位元組碼檔案
* 2. 要被所有的執行緒共享
*
* 注意 : 位元組碼檔案的使用範圍太大 , 一般不建議使用 .
空喚醒
## Lock 鎖
使用步驟
1. 建立 ReentrantLock lock = new ReentrantLock(); 物件,需要注意的是多個執行緒必須使用同一個
2. 把之前的 synchronized( 鎖 ){ 用 lock.lock() 替換
3. 把 } 用 lock.unlock(); 替換
好處
1. 不要考慮鎖物件
2. 程式碼看起來更加簡潔了
3. 可以使用 try..catch..finaly 把 lock.unlock 放到 finaly 中,好處是如果該執行緒發生了異常,照樣可以釋放鎖
## 比較 synchronized 和 Lock
* 1.synchronized: 從 jdk1.0 就開始使用的同步方法 - 稱為隱式同步
* synchronized( 鎖物件 )
* {// 獲取鎖 我們將鎖還可以稱為鎖旗艦或者監聽器
同步的程式碼}// 釋放鎖
* 2.Lock: 從 jdk1.5 開始使用的同步方法 - 稱為顯示同步
* 原理 :Lock 本身是介面 , 要透過他的子類建立物件幹活兒
* 使用過程 :
* 首先呼叫 lock() 方法獲取鎖
* 進行同步的程式碼塊兒
* 使用 unlock() 方法釋放鎖
* 使用的場景 :
* 當進行多生產者多消費者的功能時 , 使用 Lock, 其他的都使用 synchronized
* 使用效率上 :Lock 高於 synchronized
## 多執行緒的單例
// 餓漢式 , 由於公共方法中只有一行公共的程式碼 , 所以不會產生執行緒安全問題
class SingleInstance1{
private static final SingleInstance1 s = new SingleInstance1();
private SingleInstance1() {
}
public static SingleInstance1 getInstance() {
return s;
}
}
// 懶漢式 ,
class SingleInstance2{
private static SingleInstance2 s = null;
private SingleInstance2() {
}
public static SingleInstance2 getInstance() {
if (s == null) {// 儘量減少執行緒安全程式碼的判斷次數 , 提高效率
synchronized (SingleInstance2.class) {// 使用同步程式碼塊兒實現了執行緒安全
if (s == null) {
s = new SingleInstance2();
}
}
}
return s;
}
## 執行緒停止
1. 透過一個標識結束執行緒
2. 呼叫 stop 方法 --- 因為有固有的安全問題 , 所以系統不建議使用 .
3. 呼叫 interrupt 方法 ---- 如果目標執行緒等待很長時間(例如基於一個條件變數),則應使用 interrupt 方法來中斷該等待。
來自 “ ITPUB部落格 ” ,連結:http://blog.itpub.net/69913892/viewspace-2658533/,如需轉載,請註明出處,否則將追究法律責任。
相關文章
- 好程式設計師大資料學習路線分享執行緒學習筆記二程式設計師大資料執行緒筆記
- 好程式設計師大資料學習路線分享大資料之執行緒程式設計師大資料執行緒
- 好程式設計師大資料學習路線分享Actor學習筆記程式設計師大資料筆記
- 好程式設計師大資料學習路線分享Map學習筆記程式設計師大資料筆記
- 好程式設計師Java學習路線分享多執行緒概念程式設計師Java執行緒
- 好程式設計師大資料學習路線分享TCP和UDP學習筆記程式設計師大資料TCPUDP筆記
- 好程式設計師大資料學習路線分享hive的執行方式程式設計師大資料Hive
- 好程式設計師大資料學習路線分享Hbase指令學習程式設計師大資料
- 好程式設計師大資料學習路線分享MAPREDUCE程式設計師大資料
- 好程式設計師大資料學習路線分享SparkSQl程式設計師大資料SparkSQL
- 好程式設計師大資料學習路線Hadoop學習乾貨分享程式設計師大資料Hadoop
- 好程式設計師大資料學習路線分享HDFS學習總結程式設計師大資料
- 好程式設計師大資料學習路線分享hdfs學習乾貨程式設計師大資料
- 好程式設計師大資料學習路線分享大資料之字串程式設計師大資料字串
- 好程式設計師大資料學習路線分享HDFS讀流程程式設計師大資料
- 好程式設計師大資料學習路線分享AWK詳解程式設計師大資料
- 好程式設計師大資料學習路線分享UDF函式程式設計師大資料函式
- 好程式設計師大資料學習路線分享spark之Scala程式設計師大資料Spark
- 好程式設計師大資料學習路線分享Lambda表示式程式設計師大資料
- 好程式設計師Java學習路線分享MyBatis之執行緒最佳化程式設計師JavaMyBatis執行緒
- 好程式設計師大資料學習路線分享高階函式程式設計師大資料函式
- 好程式設計師大資料學習路線分享Scala系列之物件程式設計師大資料物件
- 好程式設計師大資料學習路線分享Hadoop機架感知程式設計師大資料Hadoop
- 好程式設計師大資料學習路線之大資料自學路線二程式設計師大資料
- 好程式設計師大資料學習路線之大資料自學路線一程式設計師大資料
- 好程式設計師大資料學習路線分享MapReduce全過程解析程式設計師大資料
- 好程式設計師大資料學習路線分享什麼是Hash表程式設計師大資料
- 好程式設計師大資料學習路線分享Scala系列之抽象類程式設計師大資料抽象
- 好程式設計師大資料學習路線分享Scala系列之陣列程式設計師大資料陣列
- 好程式設計師大資料學習路線分享Scala分支和迴圈程式設計師大資料
- 好程式設計師大資料學習路線分享MapReduce全流程總結程式設計師大資料
- 好程式設計師大資料學習路線分享Scala系列之泛型程式設計師大資料泛型
- 好程式設計師大資料學習路線分享大資料之基礎語法程式設計師大資料
- 好程式設計師Java學習路線分享SpringCloud程式設計師JavaSpringGCCloud
- 好程式設計師大資料學習路線Hbase總結程式設計師大資料
- 好程式設計師大資料學習路線之mapreduce概述程式設計師大資料
- 好程式設計師大資料學習筆記:Storm架構程式設計師大資料筆記ORM架構
- 好程式設計師大資料學習路線分享函式+map對映+元祖程式設計師大資料函式