初學Java之乾貨理論篇_多線程

多線程的概念

1.程序是一段靜態的代碼,它是應用軟件執行的藍本。
2.每個獨立執行的程序都可稱之爲一個進程,進程是程序的一次動態執行過程。對應了
從代碼加載、執行至執行完畢的一個完整過程,這個過程也是進程本身從產生、發展至
消亡的過程。
3.每個進程都要佔用一定的內存空間和系統資源,各個進程之間是互相獨立的。
4.多進程可以提高CPU的使用率
5.在應用程序中,不同的程序塊是可以同時運行的,這種多個程序塊同時運行的現象
被稱作併發執行。
6.多線程就是指一個應用程序中有多條併發執行的線索,每條線索都被稱作一個線程。
7.線程會交替執行,彼此間可以進行通信。
8.每個運行的程序都是一個進程,在一個進程中還可以有多個執行單元同時運行,這些
執行單元可以看做程序執行的一條條線索,被稱爲線程。
9.一個線程是一個程序內部的一個順序控制流,是程序的執行單元,執行路徑。是程序
使用CPU的最基本單位。
10.單線程是指程序只有一條執行路徑。多線程就是程序有多條執行路徑。
11.線程的執行具有隨機性。

JAVA中的線程機制

1.Java虛擬機快速地把控制從一個線程切換到另一個線程。這些線程將被輪流執行,使得
每個線程都有機會使用CPU資源。
2.每個Java應用程序都有一個缺省的主線程。
  JVM一直要等到Java應用程序中的所有線程都結束之後,才結束Java應用程序 。 
3.思考:JVM的啓動是單線程的還是多線程的?
	多線程的。原因是垃圾回收線程也要先啓動,否則很容易會出現內存溢出。現在的
	垃圾回收線程加上前面的主線程,最低啓動了兩個線程。

在這裏插入圖片描述
在這裏插入圖片描述
在這裏插入圖片描述
在這裏插入圖片描述

public final String getName():獲取線程的名稱。
public final void setName(String name):設置線程的名稱。
針對不是Thread類的子類中如何獲取線程對象名稱呢?
public static Thread currentThread():返回當前正在執行的線程對象,這樣就可以
獲取任意方法所在的線程名稱。
Thread.currentThread().getName()

例題:

未共享:
在程序中創建了四個TicketWindow對象,就等於創建了四個售票程序,每個程序中都有100張票,每個線程在獨立地處理各自的資源。
在這裏插入圖片描述
共享:只創建了一個TicketWindow對象,然後創建了四個線程,在每個線程上都去調用這個TicketWindow對象中的run()方法,這樣就可以確保四個線程訪問的是同一個tickets變量,共享100張車票。
在這裏插入圖片描述

線程的狀態與生命週期

在這裏插入圖片描述

出現阻塞狀態(Blocked)的原因,以及如何從阻塞狀態轉換爲就緒狀態:
1.當線程試圖獲取某個對象的同步鎖時,如果該鎖被其它線程所持有,則當前線程會
進入阻塞狀態,如果想從阻塞狀態進入就緒狀態必須得獲取到其它線程所持有的鎖。
2.當線程調用了一個阻塞式的IO方法時,該線程就會進入阻塞狀態,如果想進入就緒
狀態就必須要等到這個阻塞的IO方法返回。
3.當線程調用了某個對象的wait()方法時,也會使線程進入阻塞狀態,如果想進入
就緒狀態就需要使用notify()方法喚醒該線程。
4.當線程調用了Thread的sleep(long millis)方法時,也會使線程進入阻塞狀態,
在這種情況下,只需等到線程睡眠的時間到了以後,線程就會自動進入就緒狀態。
5.當在一個線程中調用了另一個線程的join()方法時,會使當前線程進入阻塞狀態,
在這種情況下,需要等到新加入的線程運行結束後纔會結束阻塞狀態,進入就緒狀態。
6.線程休眠
public static void sleep(long millis)
線程禮讓
public static void yield()
(1)線程讓步可以通過yield()方法來實現,該方法可以讓當前正在運行的線程暫停。
(2)yield()方法不會阻塞該線程,它只是將線程轉換成就緒狀態,讓系統的調度器重新
調度一次。讓多個線程的執行更和諧,但是不能靠它保證一人一次,即不能百分之百達
到讓出效果。
(3)當某個線程調用yield()方法之後,只有與當前線程優先級相同或者更高的線程才能
獲得執行的機會。
線程加入
public final void join()
後臺線程
public final void setDaemon(boolean on)
中斷線程
public final void stop()
public void interrupt()

特別注意:
僅供參考學習,轉載請附上原文鏈接
分享學習心得,如有侵權,望聯繫本人處理
還在讀大學的程序員,項目經驗少,如有紕漏,感謝指正
需要源代碼請聯繫本人
謝謝配合

如果這篇文章對您有幫助,小小的點個贊,算是給小學弟的鼓勵吧!謝謝大佬!!/呱呱.jpg

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