1)繼承thread類建立執行緒
2)實現runnable介面建立執行緒
3)使用callable和future建立執行緒
1.實現callable介面,重寫call()方法,建立該實現類的例項
2.使用futuretask類來包裝callable物件,該futuretask物件封裝了callable物件的call()方法的返回值
3.使用futuretask物件作為thread物件的target建立並啟動執行緒(因為futuretask實現了runnable介面)
4)使用執行緒池例如用executor框架
1.建立執行緒池,建立executorservice
2.使用service中的execute方法啟動執行緒
3.關閉服務(service.shutdown)
3. 與鎖定的對比
4. synchronized和lock的區別
一:出身不同
二:使用方式不同
sync是隱式鎖。lock是顯示鎖
所謂的顯示和隱式就是在使用的時候,使用者要不要手動寫**去獲取鎖和釋放鎖的操作。
三:等待是否可中斷
sync是不可中斷的。除非丟擲異常或者正常執行完成
lock可以中斷的。中斷方式:
1:呼叫設定超時方法trylock(long timeout ,timeunit unit)
2:呼叫lockinterruptibly()放到**塊中,然後呼叫interrupt()方法可以中斷
四:加鎖的時候是否可以公平
sync;非公平鎖
lock:兩者都可以的。預設是非公平鎖。在其構造方法的時候可以傳入boolean值(true:公平鎖 false:非公平鎖)
五:鎖繫結多個條件來condition
sync:沒有。要麼隨機喚醒乙個執行緒;要麼是喚醒所有等待的執行緒。
lock:用來實現分組喚醒需要喚醒的執行緒,可以精確的喚醒,而不是像sync那樣,不能精確喚醒執行緒。
六:死等
.用synchronized關鍵字的兩個執行緒1和執行緒2,如果當前執行緒1獲得鎖,執行緒2執行緒等待。如果執行緒1阻塞,執行緒2則會一直等待下去,而lock鎖就不一定會等待下去,如果嘗試獲取不到鎖,執行緒可以不用一直等待就結束了;
七:從使用鎖的方式比較
多執行緒基本操作
在多執行緒中經常用到的關鍵字是lock。lock 關鍵字可確保當乙個執行緒位於 的臨界區時,另乙個執行緒不會進入該臨界區 所謂的臨界點指的是 當多個執行緒訪問乙個更改物件狀態的方法是,因為不知道到底要修改那個狀態,將產生不可預知的資料損壞 所以關於多執行緒的程式設計中找到程式的臨界區是很重要的事情。...
JavaSE 多執行緒基本操作一
在多執行緒操作中,有一些常用的方法可以直接供我們使用,這篇部落格主要總結一下這些基本操作。1 執行緒的命名與取得 因為多執行緒的執行狀態我們無法確定,所以在對多執行緒的操作必須有乙個明確標識出線程物件的資訊,這個資訊往往通過名稱來描述。在thread類中,提供了一系列的相關方法。方法名稱 型別描述 ...
linux多執行緒程式設計基本操作(2)
linux c多執行緒總結 1 關於執行緒和程序 a 使用多執行緒的理由之一是和程序相比,它是一種非常 節儉 的多工操作方式。我們知道,在linux系統下,啟動乙個新的程序必須分配給 它獨立的位址空間,建立眾多的資料表來維護它的 段 堆疊段和資料段,這是一種 昂貴 的多工工作方式。而執行於乙個程序中...