1. 程式人生 > >執行緒 同步

執行緒 同步

執行緒

多執行緒原理; 這裡寫圖片描述 每個執行緒都會在棧裡面開闢屬於自己的空間, 在執行mian 的時候,就可以一起進行 //關於棧的問題 ,當基礎型別在棧裡面 當引用型別在棧裡面 繼承Thread類及常用方法; 這裡寫圖片描述 這裡寫圖片描述 執行緒物件呼叫run()方法不開啟執行緒,僅是物件呼叫方法。執行緒物件呼叫start()方法開啟執行緒,並讓jvm呼叫run()方法在開啟的執行緒中執行。 . 對於每個執行緒只能進行呼叫一次 starr 多個執行緒同時進行的, 但對於每個執行緒 都是獨立的 .實現Runnable介面及特點 這裡寫圖片描述

這裡寫圖片描述

定義Runnable介面的實現類,並重寫該介面的run()方法,該run()方法的方法體同樣是該執行緒的執行緒執行體。 2. 建立Runnable實現類的例項,並以此例項作為Thread的target來建立Thread物件,Thread物件才是真正的執行緒物件。 3. 呼叫執行緒物件的start()方法來啟動執行緒。 執行緒_兩種方式的區別:

需要子類繼承Thread, 不過只能是單繼承 , 使用起來特別麻煩 需要子類實現runable介面,可以進行多繼承,使用起來特別簡單,所以建議使用

匿名內部類的方式實現執行緒: 這裡寫圖片描述 這裡寫圖片描述 這裡寫圖片描述 Thread類的構造方法: 1).Thread(): 2).Thread(String name):使用一個“執行緒名稱”建立一個執行緒物件; 3).Thread(Runnable r):使用一個Runnable物件建立一個執行緒物件; 4).Thread(Runnable r,String n):使用一個Runnable和執行緒名稱構造一個執行緒物件。

同步

多執行緒的安全性問題: 這裡寫圖片描述 當多個執行緒訪問同一個資源是,且多個執行緒同寫同一個資源,則就會造成線性安全問題.解決這個問題 有三個方法 , 同步程式碼塊 , 同步程式碼, 鎖機制 由於安全問題. 出現了, 同步. 同步程式碼使用synchronized進行修飾的叫做同步方法 這裡寫圖片描述 這裡寫圖片描述 這裡寫圖片描述

同步程式碼塊;synchronized 關鍵字可用於方法中的某個區塊中,表示只對這個區塊的資源實行互斥訪問 這裡寫圖片描述 這裡寫圖片描述 Lock鎖: java.util.concurrent.locks.Lock 機制提供了比synchronized程式碼塊和synchronized方法更廣泛的鎖定操作, 同步程式碼塊/同步方法具有的功能Lock都有,除此之外更強大,更體現面向物件。 \ Lock;具有鎖住 unlock;具有解鎖的功能. 這裡寫圖片描述

這裡寫圖片描述 新建;執行緒剛剛被建立,還沒有進行啟動 runable;可執行;執行緒可以在Java虛擬機器中執行的狀態,可能執行自己的程式碼,也可能沒有,這就取決於作業系統處理器. blocked鎖阻塞;當一個執行緒試圖獲取一個物件鎖,而這個物件鎖被其他物件所持有,其他鎖 處於一個等待狀態,這個所就是blocked 鎖阻塞的狀態,其他鎖執行時,這該執行緒也就進入 runable 狀態 waiting 無限等待;一個執行緒在等待另一個執行緒執行(喚醒)動作時,該執行緒進入waiting 狀態,進入這個狀態是不可能自動喚醒的,必須等待,另一個執行緒呼叫notify或者notifyAll 才可以進行喚醒 time waiting 計時等待; 同 waiting 狀態,給他們訂了 一定的時間,等到時間一到,或者接收到喚醒通知, 常用方法有 Thread.sleep Object.wait . Teminated 被終止 ; 因為run方法正常退出 而死亡,或者因為沒有捕獲的異常終止了run方法而死亡. 1).新建:MyThread t = new MyThread(); 2).可執行(待執行):t.start(); 3).鎖阻塞:執行後呼叫某個方法,但此方法已被其他執行緒“鎖上了”。 4).無限等待:執行後,呼叫了“鎖的wait()”方法。 5).計時等待:執行後,被呼叫了sleep(…); 6).被終止:run()方法正常執行完畢。 等待與喚醒: 這裡寫圖片描述 這裡寫圖片描述 狀態圖: 這裡寫圖片描述