這篇文章帶給大家的內容是關於 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)這種機制,就是執行緒。
- 程式是電腦中的程式關於某資料集合上的一次執行活動。
- 程式是系統進行資源分配和調度的基本單位,是作業系統結構的基礎
- 執行緒是一個行程的實體,是cpu調度與分派的基本單位
- 執行緒是比行程更小的能獨立運作的基本單位 ##行程與執行緒的關係:
- (1)一個執行緒只能屬於一個行程,而一個行程可以有多個執行緒,但至少有一個執行緒
(3)cpu分給線程,即真正在cpu上運行的是線程
java程式運行原理
- java指令會啟動java虛擬機,即啟動JVM,等於啟動了一個應用程序,也就是啟動了一個進程;
- ##該進程會自動啟動一個主執行緒;
- 然後主執行緒去呼叫某個類別的main方法。
- 所以main方法運行在主執行緒中,在此之前的所有程式都是單執行緒的
- jvm啟動是多執行緒的:
(1)因為在jvm啟動的時候垃圾回收線程也要啟動,否則很容易會出現記憶體溢出;
(2)現在的垃圾回收線程加上前面的主線程,最少啟動了兩個線程,所以,jvm的啟動是多線程的。
涉及多執行緒的內容分成幾個部分:
綁好馬步:執行緒的狀態
- ##內功心法:每個物件都有的方法(機制)
- 太祖長拳:基本執行緒類別
- 九陰真經:高級多執行緒控制類別
- #New:新狀態,當執行緒物件創立後,即進入了新建狀態,如:Thread t = new MyThread()
- Runnable:就緒狀態,當呼叫執行緒物件的start()方法(t.start()),線程就進入就緒狀態。處於就緒狀態的線程,只是說明此線程已經做好了準備,隨時等待cpu調度執行,並不是說執行了t.start()此線程立即就會執行
- Running:運行狀態,當cpu開始調度處於就緒狀態的執行緒時,此時執行緒才得以真正執行,也就是進入執行狀態。
- Blocked:阻塞狀態,處於運行狀態中的執行緒由於某種原因,暫時放棄對cpu的使用權,停止執行,此時進入阻塞狀態,直到其進入到就緒狀態,才有機會再次被cpu呼叫以進入到運行狀態
- Dead:死亡狀態,執行緒執行完了或因異常退出了run()方法,該執行緒結束生命週期
- 注意:(1)就緒狀態是進入到運行狀態的唯一入口
(2)執行緒想要進入到運行狀態執行,首先必須處於就緒狀態中
(3)根據阻塞產生的原因,阻塞狀態又可以分為三種:
【1】等待阻塞:運轉狀態中的執行緒執行wait()方法,使本執行緒進入等待阻塞狀態
【2】同步阻塞:執行緒在取得synchronized同步鎖定失敗(因為鎖定被其他執行緒佔用),它會進入同步阻塞狀態
【3】其他阻塞:透過呼叫執行緒的sleep()或join()或發出了I/O請求時,執行緒會進入到阻塞狀態。當sleep()狀態逾時、join()等待執行緒終止或逾時、或I/O處理完畢時,執行緒重新轉入就緒狀態
(2)java的每個物件都有一個監視器,來監測並發程式碼的重入。
(3)在非多執行緒編碼時該監視器不發揮作用,反之如果在synchronized範圍內,監視器發揮作用
- Thread類別
- Runnable類別
- #Callable類別
(2)當使用ThreadLocal維護變數時,ThreadLocal為每個使用該變數的執行緒提供獨立的變數副本,所以每個執行緒都可以獨立的改變自己的副本,而不會影響其他執行緒所對應的副本。
(3)常用與使用者登陸控制,如記錄session資訊。
以上是java中的多線程知識的總結分析的詳細內容。更多資訊請關注PHP中文網其他相關文章!

Java在企業級應用中被廣泛使用是因為其平台獨立性。 1)平台獨立性通過Java虛擬機(JVM)實現,使代碼可在任何支持Java的平台上運行。 2)它簡化了跨平台部署和開發流程,提供了更大的靈活性和擴展性。 3)然而,需注意性能差異和第三方庫兼容性,並採用最佳實踐如使用純Java代碼和跨平台測試。

JavaplaysigantroleiniotduetoitsplatFormentence.1)itallowscodeTobewrittenOnCeandrunonVariousDevices.2)Java'secosystemprovidesuseusefidesusefidesulylibrariesforiot.3)

ThesolutiontohandlefilepathsacrossWindowsandLinuxinJavaistousePaths.get()fromthejava.nio.filepackage.1)UsePaths.get()withSystem.getProperty("user.dir")andtherelativepathtoconstructthefilepath.2)ConverttheresultingPathobjecttoaFileobjectifne

Java'splatFormIndenceistificantBecapeitAllowSitallowsDevelostWriTecoDeonCeandRunitonAnyPlatFormwithAjvm.this“ writeonce,runanywhere”(era)櫥櫃櫥櫃:1)交叉plat formcomplibility cross-platformcombiblesible,enablingDeploymentMentMentMentMentAcrAptAprospOspOspOssCrossDifferentoSswithOssuse; 2)

Java適合開發跨服務器web應用。 1)Java的“一次編寫,到處運行”哲學使其代碼可在任何支持JVM的平台上運行。 2)Java擁有豐富的生態系統,包括Spring和Hibernate等工具,簡化開發過程。 3)Java在性能和安全性方面表現出色,提供高效的內存管理和強大的安全保障。

JVM通過字節碼解釋、平台無關的API和動態類加載實現Java的WORA特性:1.字節碼被解釋為機器碼,確保跨平台運行;2.標準API抽像操作系統差異;3.類在運行時動態加載,保證一致性。

Java的最新版本通過JVM優化、標準庫改進和第三方庫支持有效解決平台特定問題。 1)JVM優化,如Java11的ZGC提升了垃圾回收性能。 2)標準庫改進,如Java9的模塊系統減少平台相關問題。 3)第三方庫提供平台優化版本,如OpenCV。

JVM的字節碼驗證過程包括四個關鍵步驟:1)檢查類文件格式是否符合規範,2)驗證字節碼指令的有效性和正確性,3)進行數據流分析確保類型安全,4)平衡驗證的徹底性與性能。通過這些步驟,JVM確保只有安全、正確的字節碼被執行,從而保護程序的完整性和安全性。


熱AI工具

Undresser.AI Undress
人工智慧驅動的應用程序,用於創建逼真的裸體照片

AI Clothes Remover
用於從照片中去除衣服的線上人工智慧工具。

Undress AI Tool
免費脫衣圖片

Clothoff.io
AI脫衣器

Video Face Swap
使用我們完全免費的人工智慧換臉工具,輕鬆在任何影片中換臉!

熱門文章

熱工具

SAP NetWeaver Server Adapter for Eclipse
將Eclipse與SAP NetWeaver應用伺服器整合。

VSCode Windows 64位元 下載
微軟推出的免費、功能強大的一款IDE編輯器

SublimeText3 Linux新版
SublimeText3 Linux最新版

mPDF
mPDF是一個PHP庫,可以從UTF-8編碼的HTML產生PDF檔案。原作者Ian Back編寫mPDF以從他的網站上「即時」輸出PDF文件,並處理不同的語言。與原始腳本如HTML2FPDF相比,它的速度較慢,並且在使用Unicode字體時產生的檔案較大,但支援CSS樣式等,並進行了大量增強。支援幾乎所有語言,包括RTL(阿拉伯語和希伯來語)和CJK(中日韓)。支援嵌套的區塊級元素(如P、DIV),

Dreamweaver CS6
視覺化網頁開發工具