進(jìn)程: 內(nèi)存中 正在運(yùn)行的一個(gè)應(yīng)用程序焕济。
線程: 進(jìn)程中的一個(gè)執(zhí)行流程尿扯。
多線程:有兩個(gè) 或 兩個(gè)以上 并發(fā)的執(zhí)行流程。
---------------------------------------
線程的生命周期:
1.新建: new Thread();
2.就緒: start();
3.運(yùn)行:run(){}
4.阻塞:暫停執(zhí)行
? 1)sleep,join阻塞
? ????? sleep:等待 多少毫秒 斧拍;超時(shí)了之后 恢復(fù) 就緒狀態(tài)等待CPU調(diào)用執(zhí)行删咱。
? ? ? ?? join:等待其它線程執(zhí)行完。
? ? ? ????? 線程A 調(diào)用了線程B的join()方法奶赔, 那么線程A等待 線程B執(zhí)行完后惋嚎,再執(zhí)行。
??? 2)同步
??? 3) wait
5.死亡
----------------------------------
主線程:任務(wù) main()
問題 :啟動(dòng)一個(gè)java應(yīng)用程序至少啟動(dòng)幾個(gè)纺阔?
? 主線程瘸彤, 垃圾回收線程
-------------------------------------
子線程:
名 : Thread-數(shù)字
創(chuàng)建子線程:
????? 方式:
? ? ? ? 1.繼承 Thread類
? ????? 2.實(shí)現(xiàn)接口 Runnable接口
??? 區(qū)別:
? ? ? 1.繼承Thread類 ,繼承了Thread類的所有可以繼承的方法;Runnable接口 笛钝,只有 run();
????? 2.Runnable接口 有利于資源共享质况。
-----------------------------------
優(yōu)先級(jí):1? -? 10愕宋;10最高
// zhangsan.setPriority(Thread.MAX_PRIORITY);
// zhangsan.setPriority(Thread.MIN_PRIORITY);
zhangsan.setPriority(Thread.NORM_PRIORITY);
------------------------------------------
線程中斷引發(fā):InterruptedException 異常:
前提 :當(dāng)前線程 處于 sleep 或 join時(shí),被其它 線程中斷了 iterrupt()了结榄,那么 當(dāng)前線程 會(huì)進(jìn)行
? ? ? 異常處理中贝。例如:主線程 調(diào)用了子線程 t1的 iterrupt方法 ,子線程 t1被中斷 進(jìn)入異常處理臼朗。
------------------------------------------
yield線程讓步(了解)
理論上:當(dāng)線程A 調(diào)用了 yield方法邻寿,那么 會(huì) 讓給線程優(yōu)先級(jí) 比它 高的線程 或 優(yōu)先級(jí)和它平等的線程執(zhí)行。
------------------------------------------------
同步:
某一時(shí)刻 此資源 只能被一個(gè)線程獨(dú)占视哑。
語法:
??? 1.同步塊:鎖定 對(duì)象
??? 2.同步方法:鎖對(duì)象this
獲得鎖:
????? 當(dāng)一個(gè)線程 訪問此對(duì)象的 同步塊 或 同步方法的時(shí)候绣否,申請(qǐng)同步鎖,申請(qǐng)成功了挡毅,就獲得了鎖蒜撮。在執(zhí)行 同步塊和 同步方法的過程中,其它線程 進(jìn)入 線程鎖定池中處于 阻塞狀態(tài)跪呈。只有 當(dāng)前執(zhí)行鎖的線程 釋放了鎖 其它線程才有 機(jī)會(huì) 獲得CPU的調(diào)用執(zhí)行段磨。
釋放鎖:
????? 1.同步方法或同步塊中的 代碼正常執(zhí)行完了,就釋放了耗绿;
????? 2.? 出現(xiàn)了未處理的 異常Exception和 Error時(shí) 苹支,釋放鎖;
????? 3?? break,return語句误阻,會(huì)結(jié)束方法或代碼塊债蜜,那么會(huì)釋放鎖。
????? 4. 執(zhí)行了 wait()會(huì)釋放鎖究反。
------------------------------
Lock 作用:
? ? ? 1.lock可以顯示的加鎖 和 釋放鎖策幼;
? ? ? 2.提供了更多的功能。
-------------------------------------
sleep(): 一定要指定參數(shù)奴紧; 放棄了CPU的執(zhí)行權(quán),但是沒有放棄鎖晶丘。
wait():可以指定參數(shù)黍氮,也可以不指定;放棄了CPU的執(zhí)行權(quán)浅浮,也放棄了鎖沫浆。