1.進程和線程
進程: 運行一個速度,程序在內存分配了運行空間
線程: 在進程中還運行,多個線程之間可以相互的切換。
問題 進程和線程的關係?
進程包括線程。
2。單線程和多線程 (JAVA搶佔)
單線程:只有一條路徑,必須等第一個執行了才能執行第二個。 比如 排隊吃飯。。。。
多線程: 有多條路徑 。。。 比如 食堂排隊的多個窗口。
3.線程分爲主線程和子線程**
主線程就相當於遊戲中的主要任務。
子線程就相當於遊戲中的分支任務。
列題:
4.線程的優先級別
Java中共有10個級別,1到10個級別
從低到高,但它不能與操作系統很好的兼容,比如Winw2000e 7個優先級別,並且不固定的所有希望能移植到各個的平臺中,那麼建議使用 Max-PRIOKIT
MIN-PRIOKIT
NORN-PRIOKIT
注: 高的級別是獲得較多的執行機會
低的級別是獲得較少的執行機會
5.問題區
問題 : 爲什麼一到要複寫Run方法??
Start方法自動調用了run方法, run方法中可以自動加入自己想要得一些功能。
問題 : 直接調用run方法和調用stat的方法的區別?
Run()方法: 普通的方法 不能啓動線程
Start()方法 : 啓動一個線程,自動的去調用run方法
public final void join()
throws InterruptedException
等待該線程終止。
等線程終止 該線程結束後,才能往下執行
public static void yield()暫停當前正在執行的線程對象,並執行其他線程。
禮讓,暫停當前正在執行的程序對象,並讓其他線程執行讓給相同優先級的或者是更高的。
public static void sleep(long millis,int nanos)
throws InterruptedException在指定的毫秒數加指定的納秒數內讓當前正在執行的線程休眠(暫停執行),此操作受到系統計時器和調度程序精度和準確性的影響。該線程不丟失任何監視器的所屬權
守護線程
setDaemon(布爾值) 設置是否爲守護線程
也就是前臺完成 後臺才能完成
比如:垃圾回收機制
結束線程
1) 修改標誌
2) interrupt()
3)public void interrupt() 中斷線程。
如果當前線程沒有中斷它自己(這在任何情況下都是允許的),則該線程的 checkAccess 方法就會被調用,這可能拋出 SecurityException。
3) 引發異常
注: 儘量不要使用 stop (太過於霸道 會直接終止所有的運行 )和
併發訪問的問題
數據的不準確性
Synchronized 同步
Synchronized (this)同步塊; this同步當前對象
Synchronized 同步方法
死鎖 !
定義:死鎖是進程死鎖的簡稱,
例如:
在一條河上有一座橋,橋面較窄,只能容納一輛汽車通過,無法讓兩輛汽車並行。如果有兩輛汽車A和B分別由橋的兩端駛上該橋,則對於A車來說,它走過橋面左面的一段路(即佔有了橋的一部分資源),要想過橋還須等待B車讓出右邊的橋面,此時A車不能前進;對於B車來說,它走過橋面右邊的一段路(即佔有了橋的一部分資源),要想過橋還須等待A車讓出左邊的橋面,此時B車也不能前進。兩邊的車都不倒車,結果造成互相等待對方讓出橋面,但是誰也不讓路,就會無休止地等下去
線程的生命週期
新建: 創建線程對象
就緒: 有執行資格,沒有執行權,start()
運行 : 有執行資格,有執行權
死亡: 線程對象變爲垃圾,等待回收