?? day11.txt
字號:
多線程:
進程與線程:
進程:同一個操作系統中執行的一個子程序,包含了三部分虛擬CPU、代碼、數據
多進程:同一個操作系統中執行的多個并行的子程序。可以提高cpu的使用率
線程:在同一個進程當中執行的子程序流
多線程:同一個進程當中并發執行的多個子程序流。可以提高cpu的使用率
進程與線程的區別:
進程有獨立的進程空間,進程中的數據存放空間(堆空間和棧空間)是獨立的。
線程的堆空間是共享的,棧空間是獨立的,線程消耗的資源也比進程小,相互之間可以影響的。
java中如何調進程:
調用本地程序的兩個類
Runtime
Runtime.getRuntime.exec(...); //執行一個程序
其返回值就是Process類型
Process
注意:
只有運行狀態的線程才有機會執行代碼,主線程的中止不會影響其他的正在運行中的線程,主線程中止也就是main()方法退出了。只有進程中的所有線程都中止時,進程(JVM進程)才會退出,只要有線程沒有中止,進程就不會退出。
操作系統決定線程是否有優先級,獨占式的操作系統中系統會有優先級的概念,共享式的操作系統則不會有優先級的。
在線程的內部,程序依然順序執行
線程編程的兩種方法:
寫一個類,繼承Thread類,覆蓋Thread類中繼承來的run()方法,這樣就寫好了自定義的線程類。
繼承java.lang.Thread類:
class MyThread extends Thread{
public void run(){ //覆蓋run(),線程體方法,自身其實就是普通的方法
.......
}
}
啟動線程:
public class TestThread{
public static void main(){
Thread t1=new Mythread();
T1.start(); //調用start()來啟動線程,線程啟動方法,向線程調度器說明當前線程已經準備好了,是一種可運行狀態
}
}
寫一個類,實現Runable接口,實現其中的run()方法。這種方法寫好的類的對象需要作為線程類創建對象時構造方法的參數。
實現java.lang.Runnable接口:
Class MyThread implements Runnable{
public void run(){
}
}
啟動線程:
public class TestThread{
public static void main(){
Runnable myThread = new MyThread();
Thread t = new Thread(myThread);
t.start();
}
}
Thread中的一些方法:
currentThread()
返回對當前正在執行的線程對象的引用(實現接口方式時使用)
sleep(long millis)
在指定的毫秒數內讓當前正在執行的線程休眠(暫停執行)。
本線程不會去搶,除非sleep結束。
多個線程之間都會去搶執行權限,不會考慮優先級。
yield()
暫停當前正在執行的線程對象,并執行其他線程。
只給本類或者優先級大于本類優先級的線程去搶。
join()
等待該線程終止。
放在start()前面則沒有用處。
setDaemon(boolean on)
將該線程標記為守護線程,守護線程需要依賴其他線程,會在虛擬機停止的時候停止。
線程的生命周期:
1)初始狀態:此時線程只是處于JVM進程中,只是創建了一個線程對象,并沒有真正開始運行。
2)可動行狀態:調用線程對象的start()方法,此時線程才真正的被創建,進入可運行狀態,等待CPU的調度。“萬事俱備,只欠CPU”。
3)運行狀態:正在運行的線程,此時它擁有CPU的執行權。
4)阻塞狀態:運行狀態中的線程,如果正在等待用戶輸入或調用了sleep()和join()等方法都會導致線程進入阻塞狀態,注意從阻塞狀態出來的線程不一定馬上回到運行狀態,而是重新回到可運行狀態,等待CPU的再次調度。
5)等待隊列狀態:一個線程調用一個對象的wait()會自動放棄該對象的鎖標記,進入等待隊列狀態,只有當有另外一線程調用臨界資源的notify()或notifyAll()方法,建議多使用notifyAll(),才會將等待隊列中的線程釋放,此線程進入鎖池狀態。
6)鎖池狀態:每個對象都有互斥鎖標記,以防止對臨界資源的訪問造成數據的不一致,和數據的不完整性。一個線程擁有一個對象的鎖標記后,另一線程想訪問該對象,必須在鎖池中等待。由系統決定哪個線程拿到鎖標記并運行。注意從鎖池狀態出來的線程不是馬上回到運行狀態,而是重新回到可運行狀態,等待CPU的再次調度。
7)終止狀態:一個線程運行結束后稱為終止狀態,一個進程中只有所有的線程退出后才會終止。
?? 快捷鍵說明
復制代碼
Ctrl + C
搜索代碼
Ctrl + F
全屏模式
F11
切換主題
Ctrl + Shift + D
顯示快捷鍵
?
增大字號
Ctrl + =
減小字號
Ctrl + -