程序:程序指正在執行的程式。
執行緒:執行緒是程序中的乙個執行單元,負責當前程序中程式的執行,乙個程序中至少有乙個執行緒。乙個程序中是可以有多個執行緒的,這個應用程式也可以稱之為多執行緒程式。
總而言之:乙個程式執行就是乙個程序,乙個程序可以有多個執行緒
什麼是多執行緒?就是乙個程式中有多個執行緒同時執行
繼承thread類,並重寫thread的run(),建立物件,開啟執行緒,run()相當於其他執行緒的main(),
實現runnable介面,並實現run(),建立runnable介面的子類物件,作為引數傳入到某個執行緒的構造方法鐘,,開啟執行緒
//自定義執行緒類
class threaddemo2 extends thread
@override
public void run() }
}/**
* 建立測試類
*/public class test
}}
//自定義執行緒執行任務類
class runnabledemo1 implements runnable }}
//測試類
public class test
}}
執行緒物件呼叫run()不開啟執行緒,僅是呼叫物件方法
執行緒物件呼叫start()開啟執行緒,並讓jvm呼叫run()在開啟的執行緒中執行
主線程的任務在main()中,自定義執行緒需要執行的任務定義在run()方法中
執行緒池是容納多個執行緒的容器,其中的執行緒可以反覆使用,省去頻繁的建立執行緒物件的操作,無需反覆建立執行緒而消耗過多資源
class myrunnable implements runnable catch (interruptedexception e)
system.out.println("教練來了: " +thread.currentthread().getname());
system.out.println("教我游泳,交完後,教練回到了游泳池"); }}
public class threadpooldemo
}
public static native void sleep (long millis) throws interruptedexception睡眠指定時間,即讓該執行緒休眠millis毫秒再執行,如果時間未到就要醒來需要interrupt()來隨時喚醒
public void interrupt ()
喚醒正在睡眠的程式,呼叫interrupt(),會使得sleep()方法丟擲interruptedexception,當sleep()丟擲了異常就中斷了sleep(),從而讓程式繼續執行下去
wait: 讓執行緒進入等待阻塞狀態,會一直等到它被其他執行緒呼叫notify()或者notifyall()喚醒,該方法只能在同步方法中呼叫,如果當前執行緒不是鎖的持有者,該方法丟擲乙個illeagalmonitorstateexception
wait(long timeout ) :時間到了自動執行,類似sleep(long millis)
notify() 該方法只能在方法和同步**塊內部呼叫,隨機選擇乙個再對該物件呼叫wait()解除阻塞狀態
notifyall() 喚醒所有wait了的物件
wait(),notify(),notifyall() 必須寫在synchronized方法內部,或者synchronized塊內部
執行緒的安全問題多是由全域性變數和靜態變數引起的,當多個執行緒對共享資料只執行讀操作是,執行緒一般是安全的,當多個執行緒執行寫操作時,需要考慮同步來解決執行緒安全問題。
將操作共享資料的**作為乙個整體,同一時間只允許乙個執行緒執行,執行過程中其他執行緒不能參與執行
synchronized
(expression)
public void run() catch (interruptedexception e) }}
}}
多執行緒基礎 Java併發1
目錄 執行緒和程序概念 同步和非同步概念 多執行緒建立方式 繼承thread類 不推薦 實現runnable介面,重寫run方法 使用匿名內部類 多執行緒的執行狀態 守護執行緒 非守護執行緒 join方法 優先順序執行緒安全 同步方式 同步 塊 同步方法 注意 class threaddemo1 e...
多執行緒1 基礎知識
提高對cpu的利用率 1.程序是什麼?資源分配的基本單位 靜態單位 2.執行緒是什麼?排程執行的基本單位 動態單位 3.纖程 協程什麼?答案肯定是否定的 首先簡單說明下計算機底層原理,cpu分為 alu,暫存器組 資料 pc 執行到哪條指令 根據os執行緒排程演算法,當乙個執行緒執行完切換到另乙個執...
多執行緒基礎
對於多執行緒程式設計,很多人概念不清,寫 的時候要麼是處處加鎖,影響效能不說,還容易莫名其妙的死鎖,還有人對多執行緒敬而遠之。所以學習多執行緒程式設計最重要的不是學習 api,而是理解什麼才是多執行緒安全的 從例子說起 include include long global1 0 volatile ...