java中的多線程知識的總結分析
這篇文章帶給大家的內容是關於 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中文網其他相關文章!

熱AI工具

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

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

Undress AI Tool
免費脫衣圖片

Clothoff.io
AI脫衣器

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

熱門文章

熱工具

記事本++7.3.1
好用且免費的程式碼編輯器

SublimeText3漢化版
中文版,非常好用

禪工作室 13.0.1
強大的PHP整合開發環境

Dreamweaver CS6
視覺化網頁開發工具

SublimeText3 Mac版
神級程式碼編輯軟體(SublimeText3)

Java 8引入了Stream API,提供了一種強大且表達力豐富的處理數據集合的方式。然而,使用Stream時,一個常見問題是:如何從forEach操作中中斷或返回? 傳統循環允許提前中斷或返回,但Stream的forEach方法並不直接支持這種方式。本文將解釋原因,並探討在Stream處理系統中實現提前終止的替代方法。 延伸閱讀: Java Stream API改進 理解Stream forEach forEach方法是一個終端操作,它對Stream中的每個元素執行一個操作。它的設計意圖是處

PHP是一種廣泛應用於服務器端的腳本語言,特別適合web開發。 1.PHP可以嵌入HTML,處理HTTP請求和響應,支持多種數據庫。 2.PHP用於生成動態網頁內容,處理表單數據,訪問數據庫等,具有強大的社區支持和開源資源。 3.PHP是解釋型語言,執行過程包括詞法分析、語法分析、編譯和執行。 4.PHP可以與MySQL結合用於用戶註冊系統等高級應用。 5.調試PHP時,可使用error_reporting()和var_dump()等函數。 6.優化PHP代碼可通過緩存機制、優化數據庫查詢和使用內置函數。 7

PHP和Python各有優勢,選擇應基於項目需求。 1.PHP適合web開發,語法簡單,執行效率高。 2.Python適用於數據科學和機器學習,語法簡潔,庫豐富。

PHP適合web開發,特別是在快速開發和處理動態內容方面表現出色,但不擅長數據科學和企業級應用。與Python相比,PHP在web開發中更具優勢,但在數據科學領域不如Python;與Java相比,PHP在企業級應用中表現較差,但在web開發中更靈活;與JavaScript相比,PHP在後端開發中更簡潔,但在前端開發中不如JavaScript。

PHP和Python各有優勢,適合不同場景。 1.PHP適用於web開發,提供內置web服務器和豐富函數庫。 2.Python適合數據科學和機器學習,語法簡潔且有強大標準庫。選擇時應根據項目需求決定。

膠囊是一種三維幾何圖形,由一個圓柱體和兩端各一個半球體組成。膠囊的體積可以通過將圓柱體的體積和兩端半球體的體積相加來計算。本教程將討論如何使用不同的方法在Java中計算給定膠囊的體積。 膠囊體積公式 膠囊體積的公式如下: 膠囊體積 = 圓柱體體積 兩個半球體體積 其中, r: 半球體的半徑。 h: 圓柱體的高度(不包括半球體)。 例子 1 輸入 半徑 = 5 單位 高度 = 10 單位 輸出 體積 = 1570.8 立方單位 解釋 使用公式計算體積: 體積 = π × r2 × h (4

PHP成為許多網站首選技術棧的原因包括其易用性、強大社區支持和廣泛應用。 1)易於學習和使用,適合初學者。 2)擁有龐大的開發者社區,資源豐富。 3)廣泛應用於WordPress、Drupal等平台。 4)與Web服務器緊密集成,簡化開發部署。

Java是熱門程式語言,適合初學者和經驗豐富的開發者學習。本教學從基礎概念出發,逐步深入解說進階主題。安裝Java開發工具包後,可透過建立簡單的「Hello,World!」程式來實踐程式設計。理解程式碼後,使用命令提示字元編譯並執行程序,控制台上將輸出「Hello,World!」。學習Java開啟了程式設計之旅,隨著掌握程度加深,可創建更複雜的應用程式。
