java執行緒 一些重點難點
1.基礎:Runnable 和 Thread
在java中我們可以通過繼承Thread類來實現一個執行緒。
class TaskThread extends Thread{
@Override
public void run() {
super.run();//呼叫了Thread的run()方法,檢視原始碼可以知道它呼叫了下面講得Runnable子類的run方法
//執行緒要執行的操作在這
}
}
但是有時候我們的某個類需要繼承其他類,這樣java為了實現多繼承,提供了Runnable這個介面。
class Task extends DownLoadFile implements Runnable{
public void run() {
}
}
這裡我們繼承了DownLoadFile這個類實現了Runnable這個介面,這樣我們就可以在一個獨立執行緒裡下載東西了
用一個Thread的時候很簡單,就是例項化,然後呼叫它的start()就可以了,當呼叫start()時,它先建立一個執行緒,然後在新執行緒裡呼叫run方法
Thread taskThread=new TaskThread(); //此時建立了一個物件,和其他物件的建立一樣,此時與新執行緒沒什麼關係
taskThread.start();//呼叫start(),新執行緒才出現
用Runnable時稍微複雜一點,因為Runnable要以來Thread,建立新執行緒的事還是要Thread來辦
Task task=new Task(); //例項化一個Task
taskThread=new Thread(task);//把task傳給Thread物件
taskThread.start();//此時會建立新執行緒,並執行task的run方法
2.執行緒體
執行緒體是一個執行緒要執行的一系列指令
所以對於Thread,它的執行緒體是run方法
如果我們不用Thread,我們的程式依然有一個執行緒,叫主執行緒,它的執行緒體對於我們java程式設計師來說是main方法
3.類,物件,執行緒
一個類可以例項化多個物件
而一個執行緒,它可以用到多個類的靜態方法,多個例項
4.執行緒同步
這裡只說一說wait 和 notify 執行緒同步方法,但它們依賴“監視器”
”監視器“,是什麼呢,它就是一個物件,不過是有條件的,這就需要先說說synchronized這個java關鍵字,它的意思是同步的。(說到”同步“,到底是什麼意思呢,現在有各種同步軟體,那是資料同步,就是保持多個地點的資料一致。我們這裡說的是執行緒同步,是要使得多個執行緒的步調一致,有個先後順序。所以synchronized修飾的方法或語句塊不會讓多個執行緒同時進入。)
”監視器“和synchronized有什麼關係呢?
(1) synchronized 修飾非靜態方法,此時在這個方法體內的就有了 ”監視器“,它是所在類的物件.
synchronized void func(){}
(2) synchronized 修飾靜態方法,此時在這個方法體內的也有了 ”監視器“,它是所在類的物件.
static synchronized void func(){}
(3) synchronized 修飾語句塊,此時需要一個引數,而這個引數就作為“監視器”。
synchronized(Object o){
}
“監視器”有什麼作用呢?
其實它的名字很形象,它不能被多個執行緒同時擁有,而要想進入synchronized修飾的方法或語句塊需要先獲得這個“監視器”,這樣就好像監視不讓多個執行緒同時進入的,當一個執行緒已經進入後,在來的執行緒會被阻塞在該方法前等待。同時它還提供了控制已經進入的執行緒的方法 wait和notify,notifyAll(終於回到只想說的這裡來了)
wait 和 notify,notifyAll
wait方法會使的當前執行緒停止,並且主動放棄”監視器“,此時它等待其它執行緒用通知它,只有其他執行緒呼叫了notify或notifyAll時它才有可能繼續。此時,如果有其它執行緒在等待,就可以進入了(這樣不就兩個執行緒同時進入了嗎,的確是的,但是隻有一個在執行。所以不能同時多個執行緒獲得同一個“監視器”。)
notify就是用來通知wait的執行緒醒過來的。它會通知一個,但不知是哪一個,notifyAll則會讓所有的都醒來。(notify只能在同步方法內呼叫,當它呼叫notify通知一個同步方法內正在wait的執行緒,這樣不就多個執行緒同時執行了嗎?恩,所以java的notify是在呼叫執行緒出來以後再去喚醒的。但是,但是,notifyAll呢????經過實驗,當多個等待的執行緒都被通知醒來時,雖然他們都醒來了,但是依然只有一個可以執行,等它退出,再選一個執行)
( 所有不確定的選擇都有執行緒排程機制來處理。)
總算完了。部落格內容是通過我實驗和對文件理解得出的,如果有錯誤,歡迎指正,若有補充,更是歡迎
相關文章
- JAVA重點類 多執行緒Java執行緒
- “多執行緒”重點概念整理執行緒
- 10、JUC、執行緒池(重點)執行緒
- java多執行緒那點事兒Java執行緒
- JAVA重難點問題剖析(二)Java
- Java多執行緒程式設計要點Java執行緒程式設計
- 多執行緒考點執行緒
- Java常見知識點彙總(⑬)——執行緒Java執行緒
- Java簡單多執行緒斷點下載Java執行緒斷點
- Java多執行緒程式設計要點 (一)Java執行緒程式設計
- Java 多執行緒程式設計要點(synchronized)Java執行緒程式設計synchronized
- Linux多執行緒程式設計———重點區分Linux執行緒程式設計
- 秒殺多執行緒面試題系列-如何使用多執行緒,詳細分析多執行緒的重點難點必考點——多執行緒同步互斥問題。各文章講解生動細緻,針對性強。必定也能助你在面試中秒殺所有多執行緒面試題...執行緒面試題
- 執行緒基本知識點執行緒
- Java多執行緒學習(五)執行緒間通訊知識點補充Java執行緒
- Java常見知識點彙總(⑭)——執行緒池Java執行緒
- 關於Java併發多執行緒的一點思考Java執行緒
- Java多執行緒——執行緒Java執行緒
- 多執行緒(三)、執行緒池 ThreadPoolExecutor 知識點總結執行緒thread
- Android 多執行緒下載,斷點續傳,執行緒池Android執行緒斷點
- 執行緒和程式的優缺點執行緒
- 執行緒池知識點詳解執行緒
- 建立執行緒知識點總結執行緒
- 多執行緒那點事—Parallel.for執行緒Parallel
- 1 多執行緒的優缺點執行緒
- 多執行緒斷點下載原理執行緒斷點
- iOS多執行緒那點事兒iOS執行緒
- Java:多執行緒模擬多站點售票過程薦Java執行緒
- 對Java多執行緒的一些理解Java執行緒
- Java 關於執行緒的一些使用Java執行緒
- Java多執行緒-執行緒中止Java執行緒
- Java多執行緒——執行緒池Java執行緒
- Java執行緒:執行緒中斷Java執行緒
- Java學習過程的一些重點(轉)Java
- 【Java面試】什麼是守護執行緒,它有什麼特點Java面試執行緒
- Monitor Ctrl-Break執行緒,有點坑執行緒
- 多執行緒基礎知識點梳理執行緒
- Thread執行緒知識點講解thread執行緒