標籤:blog 重寫 關鍵字 public string 自動調用 資料 清理 線程優先順序
1.線程:
a.由來:單任務OS —— 多任務OS
b.進程:每一個進程對應一個應用程式,分配獨立記憶體空間
c.線程:線程是進程內部的一個獨立的執行分支
d.特點:共用內容地址空間,切換成本更低
2.線程的建立和啟動
a.方法一:(Thread)
①繼承Thread類,重寫run方法——run方法只負責確定這個線程要做的事情
public class MyThread extends Thread{ public void run() { }}
②開啟線程,要調用start方法——該方法會為線程分配資源,然後自動調用this.run()
MyThread mt = new MyThread();mt.start(); //開啟線程
③如果調用run方法——不會報錯,但只是普通的方法調用,沒有開啟新線程
b.方法二:(Runnable)
①實現Runnable介面,重寫run方法——run方法只負責確定這個線程要做的事情
public class YourThread implements Runnable{ public void run() { }}
②建立一個Thread對象,把Runnable介面的實作類別對象傳入
調用Thread對象的start()
YourThread yt = new YourThread();Thread th = new Thread(yt);th.start();
3.線程狀態
a.流程:①建立狀態(new Thread() 對象)——就緒狀態(調用start(),但start()在調用run()之前)——運行狀態(start(),調用run())——死亡狀態(run()方法結束,進行資源回收清理)
②中斷狀態:在運行狀態中,線程由於種種原因沒有得到CPU執行
b.中斷狀態的五個原因:
①線程的優先順序:線程優先順序共十級,最高為10,最低為1
優先順序高的只是被執行的幾率更大,不代表完勝優先順序低的
th.setPriority(10);th.setPriority(Thread.MAX_PRIORITY);
②阻塞:由於輸入/輸出,造成線程進行中斷狀態(如:Scanner)
③休眠:Thread的sleep方法
th.sleep(500); //傳休眠的毫秒數
④等待 與 喚醒:Object 的 wait() 與 notify() 方法
⑤掛起:Thread 的 yield() 方法
4.同步鎖
a.關鍵字:synchronized
b.意義:當多個線程訪問同一資源的時候,有可能造成該資源資料混亂。
為保證該資源每次只能被一個線程使用,使用完以後再交給下一個線程,我們要使用同步技術。
c.同步的實現:
①同步方法:在資源身上加同步關鍵字synchronized
public synchronized void show(String name){}
②同步塊:在調用資源的線程身上使用synchronized
synchronized(this.rs){ this.rs.show(this.getName());}
Java 之 多線程編程