這篇文章帶給大家的內容是關於 java中的多執行緒知識的總結分析,有一定的參考價值,有需要的朋友可以參考一下,希望對你有幫助。
進程:正在運行的程序,是系統進行資源分配和呼叫的獨立單位。
流程就是一個程式在一個資料集上的一次動態執行過程。
進程一般由程式、資料集、進程控制塊三部分組成。
每一個行程都有它自己的記憶體空間和系統資源。
我們寫的程式用來描述流程要完成哪些功能以及如何完成;
資料集則是程式在執行過程中所需要使用的資源;
進程控制塊用來記錄進程的外部特徵,描述進程的執行變化過程,系統可以利用它來控制和管理進程,他是系統感知進程存在的唯一識別。
舉例說明過程:
(1)想像一位有一手好廚藝的電腦科學家正在為他的女兒烘焙生日蛋糕;
(2)他有做生日蛋糕的食譜,廚房裡有所需要的原料:麵粉、雞蛋、糖等。
(3)在這個比喻中,做蛋糕的食譜就是程式;
(4)電腦科學家是處理器cpu;
(5)而做蛋糕的各種原料就是輸入資料。
(6)過程就是廚師閱讀食譜、取來各種原料、以及烘焙蛋糕等一系列動作的總和。
(7)現在假設電腦科學家的兒子哭著跑來出來,說他的頭被一隻蜜蜂蟄了;
(8)計算機科學家就記錄下他照著食譜做到了哪兒了,也就是保存進程的當前狀態;
(9)然後拿出一本急救手冊,按照其中的指示處理蟄傷;###(10)這時我們就看到處理器從一個進程切換到另一個高優先級的進程;
(11)每個進程擁有各自的程式(食譜和急救手冊);
(12)當蜜蜂蟄傷被處理完成之後,這位電腦科學家又回來做蛋糕;
(13)從他離開時的那一步繼續進行。
(2)若只有一個進程,勢必造成同一時間只能做一件事的尷尬,就是說當保存時,不能鍵盤輸入;
(3)若有多個進程,每個進程負責一個任務;
(4)進程A負責鍵盤輸入,進程B負責將內容顯示在螢幕上,進程C負責保存內容到硬碟中;
(5)這裡A、B、C間的協作涉及到了進程通訊問題,而且它們有共同都需要的內容:文字內容;
(6)不停的切換會造成效能上的損失。
(7)若有一種機制,可以使A、B、C可以共享資源;
(8)這樣上下文切換所需要保存和恢復的內容就少了;
(9)同時也可以減少通訊所帶來的效能損耗。
(10)這種機制,就是執行緒。
(3)cpu分給線程,即真正在cpu上運行的是線程
java程式運行原理
(1)因為在jvm啟動的時候垃圾回收線程也要啟動,否則很容易會出現記憶體溢出;
(2)現在的垃圾回收線程加上前面的主線程,最少啟動了兩個線程,所以,jvm的啟動是多線程的。
綁好馬步:執行緒的狀態
(2)執行緒想要進入到運行狀態執行,首先必須處於就緒狀態中
(3)根據阻塞產生的原因,阻塞狀態又可以分為三種:
【1】等待阻塞:運轉狀態中的執行緒執行wait()方法,使本執行緒進入等待阻塞狀態
【2】同步阻塞:執行緒在取得synchronized同步鎖定失敗(因為鎖定被其他執行緒佔用),它會進入同步阻塞狀態
【3】其他阻塞:透過呼叫執行緒的sleep()或join()或發出了I/O請求時,執行緒會進入到阻塞狀態。當sleep()狀態逾時、join()等待執行緒終止或逾時、或I/O處理完畢時,執行緒重新轉入就緒狀態
(2)java的每個物件都有一個監視器,來監測並發程式碼的重入。
(3)在非多執行緒編碼時該監視器不發揮作用,反之如果在synchronized範圍內,監視器發揮作用
(2)當使用ThreadLocal維護變數時,ThreadLocal為每個使用該變數的執行緒提供獨立的變數副本,所以每個執行緒都可以獨立的改變自己的副本,而不會影響其他執行緒所對應的副本。
(3)常用與使用者登陸控制,如記錄session資訊。
以上是java中的多線程知識的總結分析的詳細內容。更多資訊請關注PHP中文網其他相關文章!