建立執行緒知識點總結
1.主執行緒:執行主(main)方法的執行緒
單執行緒程式:java程式中只有一個執行緒,執行從main方法開始,從上到下依次執行,JVM執行main方法,main方法會進入到棧記憶體,JVM會找作業系統開闢一條main方法通向CPU的執行路徑,CPU就可以通過這個路徑來執行main方法,而這個路徑就叫main(主)執行緒。
2.建立多執行緒程式的第一種方式:建立Thread類的子類
Thread類:是描述執行緒的類,我們想要實現多執行緒程式,就必須繼承Thread類
實現步驟:
1.建立一個Thread類的子類
2.在Thread類的子類中重寫Thread類中的run方法,設定執行緒任務(開啟執行緒要做什麼?)
3.建立Thread類的子類物件
4.呼叫Thread類中的star方法,開啟新的執行緒,執行run方法
結果是兩個執行緒併發執行,當前執行緒(main執行緒)和另一個執行緒(建立的新執行緒,執行其run方法)
多次啟動一個執行緒是非法的,特別是當執行緒執行結束後,不能再重新啟動
java屬於搶佔式排程,哪個執行緒優先順序高,哪個執行緒優先執行,同一個優先順序,隨機一個執行
3.建立多執行緒程式的第二種方式:實現Runnable介面
實現步驟:
1.建立一個Runnable介面的實現類
2.在實現類中重寫Runnable介面的run方法,設定執行緒任務
3.建立Runnable介面的實現類物件
4.建立Thread物件,構造方法中傳遞Runnable介面的實現類物件
5.呼叫Thread類中的start方法,開啟新的執行緒,執行run方法
實現Runnable介面建立多執行緒的好處:
1.避免了單繼承的侷限性
一個類只能繼承一個類(一個人只能有一個親爹),類繼承了Thread類就不能繼承其他類
實現了Runnable介面還可以繼承其他類,實現其他的介面
2.增強了程式的擴充套件性,降低了程式的耦合性(解耦)
實現Runnable介面的方式,把設定執行緒任務和開啟新執行緒進行了分離
實現類中,重寫run方法:用來設定執行緒任務
建立Thread類物件呼叫start方法:用來開啟新執行緒
-
匿名內部類方式實現執行緒的建立
匿名:沒有名字
內部類:寫在其他類內部的類匿名內部類作用:簡化程式碼
把子類繼承父類,重寫父類的方法,建立子類物件合成一步完成
把實現類實現介面,重寫介面中的方法,建立實現類的物件合成一步完成匿名內部類最終產物:子類/實現類物件,而這個類沒有名字
格式:
new 父類/介面(){
重複父類/介面中的方法
}
1).
//執行緒的父類是Thread
//new MyThread().start();
new Thread(){
//重寫run方法,設定執行緒任務
@Override
public void run() {
for (int i = 0; i < 20; i++) {
System.out.println(Thread.currentThread().getName()+"-->"+"程式猿");
}
}
}.start();
2).
new Thread(new Runnable(){
//重寫run方法,設定執行緒任務
@Override
public void run() {
for (int i = 0; i < 20; i++) {
System.out.println(Thread.currentThread().getName()+"-->"+"程式設計師");
}
}
}).start();
-
進入到TimeWaiting(計時等待)的兩種方式
1.使用sleep(long m)方法,在毫秒值結束之後,執行緒睡醒進入到Runnable/Blocked狀態
2.使用wait(long m)方法,wait方法如果在毫秒值結束之後,還沒有被notify喚醒,就會自動醒來,執行緒睡醒進入到Runnable/Blocked狀態喚醒的方法:
notify(),喚醒在此物件監視器上等待的單個執行緒
notifyAll(),喚醒在此監視器上等待的所有執行緒
例:
//建立鎖物件保證唯一
Object obj=new Object();
//建立一個顧客執行緒
new Thread(new Runnable() {
@Override
public void run() {
//保證等待和喚醒只能有一個在執行
synchronized (obj){
System.out.println("告知老闆要的包子種類和數量");
//呼叫wait方法,放棄cpu的執行,進入到WAITTING狀態
try {
obj.wait(5000);
} catch (InterruptedException e) {
e.printStackTrace();
}
//喚醒之後執行的程式碼
System.out.println("包子開吃");
}
}
}).start();
相關文章
- 多執行緒(三)、執行緒池 ThreadPoolExecutor 知識點總結執行緒thread
- 執行緒學習知識總結執行緒
- C++知識點:對於多執行緒的總結C++執行緒
- Java常見知識點彙總(⑬)——執行緒Java執行緒
- 執行緒基本知識點執行緒
- 清明花了幾天總結了多執行緒的知識點執行緒
- Java常見知識點彙總(⑭)——執行緒池Java執行緒
- 40個關於Java多執行緒知識點問題總結Java執行緒
- Java 多執行緒 | 併發知識問答總結Java執行緒
- 執行緒池知識點詳解執行緒
- 多執行緒基礎知識點梳理執行緒
- Thread執行緒知識點講解thread執行緒
- Java知識點總結(動態執行JS程式碼 )JavaJS
- 認識執行緒、建立執行緒寫法執行緒
- 知識點總結
- 三、執行緒池知識點整理筆記執行緒筆記
- 多執行緒基礎必要知識點!看了學習多執行緒事半功倍執行緒
- linux知識知識點總結Linux
- HDFS知識點總結
- MongoDB知識點總結MongoDB
- Java 知識點總結Java
- django知識點總結Django
- jQuery 知識點總結jQuery
- MySQL知識點總結MySql
- HBase知識點總結
- Kafka知識點總結Kafka
- JavaScript知識點總結JavaScript
- iOS 知識點總結iOS
- Java知識點總結Java
- pga知識點總結
- Java多執行緒學習(五)執行緒間通訊知識點補充Java執行緒
- 多執行緒程式設計總結:一、認識多執行緒本質執行緒程式設計
- Java執行緒總結Java執行緒
- 【多執行緒總結(二)-執行緒安全與執行緒同步】執行緒
- 多執行緒面試必備基礎知識彙總執行緒面試
- 前置知識—程式和執行緒執行緒
- 多執行緒基礎知識執行緒
- 多執行緒程式設計的基礎知識點執行緒程式設計