JAVA_SE基礎——72.自定義線程

 進程 :  正在執行的程序稱作爲一個進程。  進程負責了內存空間的劃分。
 
問題: windows號稱是多任務的操作系統,那麼windows是同時運行多個應用程序嗎?

從宏觀的角度: windows確實是在同時運行多個應用程序。

從微觀角度: cpu是做了一個快速切換執行的動作,由於速度態度,所以我感覺不到在切換 而已。


線程: 線程在一個進程 中負責了代碼的執行,就是進程中一個執行路徑,


多線程: 在一個進程中有多個線程同時在執行不同的任務。


疑問 :線程負責了代碼 的執行,我們之前沒有學過線程,爲什麼代碼可以執行呢?
運行任何一個java程序,jvm在運行的時候都會創建一個main線程執行main方法中所有代碼。


一個java應用程序至少有幾個線程?
至少有兩個線程, 一個是主線程負責main方法代碼的執行,一個是垃圾回收器線程,負責了回收垃圾。


多線程的好處:
1. 解決了一個進程能同時執行多個任務的問題。
2. 提高了資源的利用率。


多線程 的弊端:
1. 增加cpu的負擔。
2. 降低了一個進程中線程的執行概率。
3. 引發了線程安全 問題。
4. 出現了死鎖現象。

如何創建多線程:

創建線程的方式:

方式一:
1. 自定義一個類繼承Thread類。
2. 重寫Thread類的run方法 , 把自定義線程的任務代碼寫在run方法中
疑問: 重寫run方法的目的是什麼?  
  每個線程都有自己的任務代碼,jvm創建的主線程的任務代碼就是main方法中的所有代碼, 自定義線程的任務代碼就寫在run方法中,自定義線程負責了run方法中代碼。
3. 創建Thread的子類對象,並且調用start方法開啓線程。

注意: 一個線程一旦開啓,那麼線程就會執行run方法中的代碼,run方法千萬不能直接調用,直接調用run方法就相當調用了一個普通的方法而已

並沒有開啓新的線程。

public class Demo1 extends Thread {
	
	@Override  //把自定義線程的任務代碼寫在run方法中。
	public void run() {
		for(int i  = 0 ; i < 10 ; i++){
			System.out.println("自定義線程:"+i);
		}
	}
	
	
	public static void main(String[] args) {
		//創建了自定義的線程對象。
		Demo1 d = new Demo1();
		//調用start方法啓動線程
		d.start();
		
		for(int i  = 0 ; i < 10 ; i++){
			System.out.println("main線程:"+i);
		}
	}

	
	
}
運行結果:

main線程:0
main線程:1
main線程:2
main線程:3
main線程:4
main線程:5
自定義線程:0
自定義線程:1
自定義線程:2
main線程:6
自定義線程:3
自定義線程:4
自定義線程:5
自定義線程:6
自定義線程:7
main線程:7
main線程:8
main線程:9
自定義線程:8
自定義線程:9


看運行結果是不是有種資源搶奪的意思? 這就是多線程的基本原理了

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章