<JavaEE> 什么是線程(Thread)?進程和線程有什么區別?

目錄

一、線程(Thread)的概念

二、線程存在的意義

2.1 并發編程

2.2 比進程更“輕量”

三、使用線程時應該注意

四、進程和線程的區別

五、Java中的線程和操作系統中的線程是不同的概念

六、多線程編程


一、線程(Thread)的概念

線程是操作系統中實現并發編程的一種基本結構。
線程可以被看作是運行在操作系統中的一個獨立的工作單元,?個線程就是?個 "執行流"。
每個線程之間都可以按照順序執行自己的代碼。多個線程之間 "同時" 執行著多份代碼。
線程的創建和執行由操作系統負責管理,程序員只需要提供線程執行的任務。
一個進程中可以有多個線程。每個線程也是由一個進程控制塊(PCB)進行描述的。

閱讀指針 -> 《什么是進程控制塊(PCB Process Control Block)?》

<JavaEE> 什么是進程控制塊(PCB Process Control Block)?-CSDN博客文章瀏覽閱讀23次。介紹進程控制塊和進程控制塊的核心屬性。進程控制塊適用于進程,也適用于線程。https://blog.csdn.net/zzy734437202/article/details/134583750


二、線程存在的意義

2.1 并發編程

線程可以提高程序的并發性能,充分利用多核CPU的資源。
特別是在處理I/O密集型任務時,有些場景需要等待IO,在等待IO時,可以將系統資源調度給其他任務使用。
當程序需要執行多個任務時,線程可以同時處理這些任務,從而提高程序的執行效率。

2.2 比進程更“輕量”

進程也可以進行并發編程,但線程比進程更輕量,線程在創建、調度和銷毀上,都要比進程快。
所以線程可以減輕CPU的負擔,提高程序的響應速度。
線程保持了獨立調度執行,支持并發的同時,省去了“分配資源”和“釋放資源”帶來的額外開銷。這意味著只有在第一個線程,也就是進程創建時才需要申請系統資源,后續線程的創建則不再需要重新申請系統資源了。

三、使用線程時應該注意

注意以下幾點說明
線程并非越多越好線程數量太多時,會加劇線程間對有限的CPU資源的競爭,這增加了資源調度的開銷,降低了執行效率。
資源共享存在副作用進程和進程之間不會互相影響,但如果同一個進程中的某一個線程拋出異常,這個進程中的其他線程也會受到影響,這就可能導致整個進程異常終止。
線程安全問題線程之間可能互相干擾沖突,導致代碼出現邏輯錯誤。線程安全問題也是并發編程的重點和難點。

四、進程和線程的區別

(1)進程包含線程。每一個進程至少有一個線程,這個線程被稱為主線程。
(2)進程和進程之間不共享內存空間,每個進程都有自己的資源。同一個進程的線程之間共享同一分資源,如內存空間、文件描述符表等,每個線程都是一個獨立的執行流,單獨參加到CPU的調度中。
(3)進程是系統分配資源的最小單位,線程是系統調度的最小單位。
(4)一個進程發生異常一般不會影響到其他進程。但是一個線程出現異常,則可能導致同進程內的其他線程也發生異常,最終可能導致包含這個線程的進程也出現異常。

五、Java中的線程和操作系統中的線程是不同的概念

操作系統中的線程線程是操作系統中的概念。操作系統內核實現了線程機制,并對用戶岑提供了供用戶使用的線程相關API。
Java中的線程Java標準庫中的Thread類是對操作系統提供的API進行了進一步的抽象和封裝。

六、多線程編程

多線程程序和非多線程程序的區別和優勢在于,多線程每個線程都是一個獨立的執行流,多個線程可以并發執行,增加了程序運行速度,提高了程序的運行效率。
許多語言都是支持多進程并發編程,也支持多線程并發編程。但是,在Java中,更鼓勵多線程并發編程。
因為在Java標準庫中,很多多進程編程的相關API都沒有提供,而多線程編程的API都有封裝提供。
更重要的是,在Java中每啟動一個進程,就要啟動一次Java虛擬機,這加大了多進程編程的系統開銷。
因此在Java中,更推薦多線程并發編程。

閱讀指針 -> 《介紹 線程類 Thread 》

鏈接生成中.........

本文來自互聯網用戶投稿,該文觀點僅代表作者本人,不代表本站立場。本站僅提供信息存儲空間服務,不擁有所有權,不承擔相關法律責任。
如若轉載,請注明出處:http://www.pswp.cn/news/165118.shtml
繁體地址,請注明出處:http://hk.pswp.cn/news/165118.shtml
英文地址,請注明出處:http://en.pswp.cn/news/165118.shtml

如若內容造成侵權/違法違規/事實不符,請聯系多彩編程網進行投訴反饋email:809451989@qq.com,一經查實,立即刪除!

相關文章

藍橋杯官網練習題(奇怪的數列)

題目描述 從 X 星截獲一份電碼,是一些數字,如下: 13 1113 3113132113 1113122113 ? YY 博士經徹夜研究,發現了規律: 第一行的數字隨便是什么,以后每一行都是對上一行"讀出來" 比如第 2…

圖神經網絡的數學原理總結

圖深度學習(Graph Deep Learning) 多年來一直在加速發展。許多現實生活問題使GDL成為萬能工具:在社交媒體、藥物發現、芯片植入、預測、生物信息學等方面都顯示出了很大的前景。 本文將流行的圖神經網絡及其數學細微差別的進行詳細的梳理和解釋,圖深度學…

Linux中flask項目開啟https訪問

1.下載阿里云免費證書 2.項目添加https配置 3.服務器開啟https訪問 3.1 重新安裝OpenSSL 3.2.重新安裝Python 上一次已經講過Linux安裝部署Python: Linux安裝Python3.10與部署flask項目實戰詳細記錄,今天記錄一下Python項目如何支持https訪問…

《計算機中的程序》(靈魂六問)

目錄 1、程序是什么? 2、程序是由什么組成的? 3、什么是機器語言? 4、正在運行的程序存儲在什么位置? 5、什么是內存地址? 6、計算機的構成元件中,負責程序的解釋和運行是哪個? 1、程序是什…

性能相關的閃存特性

一、多Plane操作 上章提到若干個Plane組成Die或者叫LUN,即一個Die上有多個Plane 每次進行寫操作時,控制器先將數據寫入頁緩存中,等同一個Die上另一個Plane也寫數據的時候,再同時寫入,原來單獨操作一個Plane的時間變成了可以同時做…

Springmvc實現增刪改差

一、包結構 二、各層代碼 (1)數據User public class User {private Integer id;private String userName;private String note;public User() {super();}public User(Integer i, String userName, String note) {super();this.id i;this.userName userName;this.note note;…

Qt實現自定義IP地址輸入控件(百分百還原Windows 10網絡地址輸入框)

在開發網絡相關的程序時,我們經常需要輸入IP地址,例如源地址和目標地址。Qt提供了一些基礎的控件,如QLineEdit,但是它們并不能滿足我們對IP地址輸入的要求,例如限制輸入的格式、自動跳轉到下一個輸入框、處理回車和退格鍵等。因此,我們需要自己編寫一個自定義的IP地址輸入…

AI AIgents時代- Autogen

由微軟開發的 Autogen 是一個新的 Agents 項目,剛一上線就登上GitHub熱榜,狂攬11k星??? 項目地址:https://github.com/microsoft/autogen Autogen 允許你根據需要創建任意數量的Agents,并讓它們協同工作以執行任務。它的獨特…

外觀模式 (Facade Pattern)

定義: 外觀模式(Facade Pattern)是一種結構型設計模式,它通過提供一個統一的高層接口來簡化復雜子系統或庫的訪問。這種模式的關鍵在于,它創建了一個外觀類,這個類封裝了對子系統的一系列復雜交互&#xf…

【贈書第7期】從零基礎到精通Flutter開發

文章目錄 前言 1 安裝Flutter和Dart 2 了解Flutter的基礎概念 2.1 Widget 2.2 MaterialApp和Scaffold 2.3 Hot Reload 3 編寫你的第一個Flutter應用 3.1 創建一個Flutter項目 3.2 修改默認頁面 3.3 添加交互 4 深入學習Flutter高級特性 4.1 路由和導航 4.2 狀態管…

python之TCP的網絡應用程序開發

文章目錄 版權聲明python3編碼轉換socket類的使用創建Socket對象Socket對象常用方法和參數使用示例服務器端代碼客戶端代碼 TCP客戶端程序開發流程TCP服務端程序開發流程TCP網絡應用程序注意點socket之send和recv原理剖析send原理剖析recv原理剖析send和recv原理剖析圖 多任務版…

淺談C#在unity應用中的工廠模式

文章目錄 前言簡單工廠模式工廠方法模式抽象工廠模式Unity實戰 前言 工廠模式是一種創建型設計模式,它提供了一種將對象的實例化過程封裝起來的方法,使得客戶端代碼不必直接依賴于具體類。這有助于降低代碼的耦合度,提高代碼的可維護性和可擴…

Python項目打包

Python項目如何打包? 本指南總結了Python項目打包的最佳實踐,主要涉及代碼的打包和分發,以及環境和依賴的管理。 0. 一般項目清單 源代碼(可使用git托管)數據包(可使用DVC托管)Docker環境鏡像…

Python進行threading多線程編程及高級并發處理機制

threading 模塊是 Python 中用于進行多線程編程的標準庫之一。通過 threading 模塊,你可以創建和管理線程,使得程序能夠并發執行多個任務。以下是一些基本的 threading 模塊的用法: 1. 創建線程: 使用 threading.Thread 類可以創…

在兩個java項目中實現Redis的發布訂閱模式

如何在兩個java項目中實現Redis的發布訂閱模式? 1. Redis簡介2. 發布訂閱模式介紹3. 實現思路4. 代碼實現及詳細解釋4.1. RedisUtil4.2. Publisher4.3. Subscriber4.4. 運行程序 目錄: Redis簡介發布訂閱模式介紹實現思路代碼實現及詳細解釋 1. Redis簡…

HTB Napper WriteUp

Napper 2023年11月12日 14:58:35User Nmap ? Napper nmap -sCV -A -p- 10.10.11.240 --min-rate 10000 Starting Nmap 7.80 ( https://nmap.org ) at 2023-11-12 13:58 CST Nmap scan report for app.napper.htb (10.10.11.240) Host is up (0.15s latency). Not shown: …

gitee推薦-SAPI++

一下內容來自gitee。 SaaS-Apps-Engine: 智者|SAPI是多應用、多租戶SaaS應用引擎,支持(小程序/公眾號/輕應用/企微/抖音/支付寶/百度)等多平臺應用。基于ThinkPHP6.1/8.0原生多應用模式開發,簡潔、高效、易擴展。集成強大的權限控…

適用于電腦的5個免費文件恢復軟件分享

適用于電腦的最佳免費文件恢復軟件 任何計算機用戶都可能經歷過丟失重要文件的恐懼。重要數據的丟失可能會令人不安和沮喪,無論是由于不小心刪除、計算機故障還是硬盤格式化造成的。幸運的是,在數字時代,您可以使用值得信賴的解決方案檢索這些…

好工具|datamap,一個好用的地圖可視化Excel插件,在Excel中實現地理編碼、拾取坐標

在做VRP相關研究的時候,需要對地圖數據做很多處理,比如地理編碼,根據“重慶市沙坪壩區沙正街174號”這樣的一個文本地址知道他的經緯度;再比如繪制一些散點圖,根據某個位置的經緯度在地圖上把它標注出來。還有有的時候…

vue + docxtemplater 導出 word 文檔

一、痛點 word 導出 這種功能其實之前都是后端實現的,但最近有個項目沒得后端。所以研究下前端導出。 ps: 前端還可以導出 pdf,但是其分頁問題需要話精力去計算才可能實現,并且都不是很完善。可參考之前的文章:利用 h…