如何簡單的去使用jconsloe 查看線程 (多線程編程篇1)

目錄

?前言

1.進程和線程

進程

PCB 的作用

并發編程和并行編程

線程

為什么選擇多線程編程

2.在IDEA中如何簡單創建一個線程?

1. 通過繼承Thread類

2. 通過實現 Runnable?接口

3. 使用 Lambda 表達式

3.如何簡單使用jconsloe去查看創建好的線程

?前言

2025來了,這是第一篇博客,算是筆者的學習筆記吧,供和我一樣的初學讀者參考學習,愿我們一同進步!

本篇博客大致簡單地討論如下內容:

1.什么是線程,什么是進程?

2.在IDEA中如何簡單創建一個線程

3.如何簡單使用jconsloe去查看創建好的線程

如果對您有幫助,希望您可以點贊收藏,如果您發現有錯誤的地方請私信筆者,核實無誤后筆者將給予報酬,也歡迎大佬在評論區中對博客內容補充說明,鄙人將一并感激并給予報酬.

1.進程和線程

進程

首先是進程,在筆者的理解中,進程可以簡單形容為‘正在運行中的程序’。操作系統通過創建和管理進程來分配和控制硬件資源,確保每個進程能夠獨立地執行并共享計算機的資源.

這里我們引入一個概念——"pcb".? 即進程控制塊,是操作系統用于管理進程的一個數據結構。它保存了關于進程的重要信息,使得操作系統能夠有效地管理和調度進程。每個進程在創建時,操作系統都會為其分配一個 PCB,并在進程的生命周期內持續維護它。

按照筆者的理解,pcb中有許多屬性,存儲了進程的信息,操作系統也通過pcb來管理我們的進程

PCB的具體作用如下

PCB 的作用

  1. 存儲進程狀態

    • PCB 保存了進程的狀態信息(如運行中、就緒、阻塞等),幫助操作系統了解進程的當前執行狀態。
    • 進程的狀態變化(如從就緒狀態到運行狀態)時,操作系統會更新 PCB。
  2. 保存程序計數器

    • 程序計數器(Program Counter)保存了進程下一條將要執行的指令的地址。每次進程被切換時,操作系統會保存當前進程的程序計數器,并恢復下一個進程的程序計數器。
  3. 保存CPU寄存器內容(與2合稱為上下文)

    • 當進程被暫停時,CPU 寄存器中的數據(如通用寄存器、堆棧指針等)會被保存到 PCB 中。下次該進程被調度時,操作系統會恢復這些寄存器內容,確保進程從上次暫停的地方繼續執行。
  4. 存儲內存管理信息

    • PCB 包含與進程地址空間相關的信息,如進程的內存分配、頁表信息等。它幫助操作系統進行內存管理,確保進程在自己的地址空間內運行,并避免不同進程之間的內存沖突。
  5. 存儲進程調度信息(優先級)

    • PCB 中保存了調度信息(如優先級、調度策略等),這些信息用于進程的調度和優先級判斷,幫助操作系統決定哪個進程在何時被調度執行。
  6. 保存進程標識符(PID)

    • 每個進程都有一個唯一的進程標識符(PID)。操作系統通過 PID 來識別不同的進程。PCB 中包含了進程的 PID。
  7. 記錄進程的資源使用情況(記賬信息)

    • PCB 中還保存了進程所擁有的資源信息,比如文件描述符、I/O 設備等資源。這些信息對操作系統在資源分配和回收時非常重要。

以上就是筆者對于進程的簡單介紹,歡迎大家的來糾正和補充

并發編程和并行編程

在介紹線程之前,簡單介紹一下并發,并行編程

簡單來說,假如兩個進程在cpu的兩個核心上同時執行, 就叫并行.

如果一個核心需要執行這兩個進程,就通過輪轉來在短時間內交替執行, 操作系統通過pcb中的"優先級","進程狀態","記賬信息"等屬性來分配資源,這就是并發編程.

并發編程的目的是提高程序的效率,特別是在處理多個任務時。它不要求任務必須在物理上完全同時進行,而是關注如何在合理的時間內調度多個任務,讓它們看起來像是在并行執行。

我的老師告訴我,宏觀上這倆差別不大,統一用"并發"來稱呼

線程

按照筆者學習的知識介紹:

一個線程就是一個 " 執行流 ". 每個線程之間都可以按照順訊執行自己的代碼 . 多個線程之間 " 同時 " 執行著多份代碼,?在一個進程中,至少有一個線程.

為什么選擇多線程編程

但是我們為什么需要多線程編程而不是多進程編程呢?
首先就是,"并發編程"成為了剛需,能更好的利用多核心cpu的資源
但是比起多進程編程,多線程編程更加輕量.
因為不管是創建一個進程,調度一個進程,銷毀一個進程,都需要消耗更多的時間,光是去給這些進程分配內存空間,就已經是一個大活了
而線程依附于進程,但是每一個線程都可以獨立的去工作,每一個線程也有 "上下文","記賬信息","狀態"等屬性,當一個進程有多個線程時,它就有多個pcb,每個線程有一個pcb.
上述材料我們可以得出兩個結論
一:每個線程可以獨立的去cpu上調度執行
二:同一個進程的線程們共用一套內存空間和文件資源
每一個進程好比一個廠房,每一個線程就好比廠房里的生產線!
所以,這就是多線程編程的好處

2.在IDEA中如何簡單創建一個線程?

線程是操作系統中的概念 . 操作系統內核實現了線程這樣的機制 , 并且對用戶層提供了一些 API 供用戶使 用( 例如 Linux pthread ).
Java 標準庫中 Thread 類可以視為是對操作系統提供的 API 進行了進一步的抽象和封裝 .
在 Java 中,創建線程的方式有很多種,常見的有以下幾種:

1. 通過繼承Thread類

class MyThread extends Thread {@Overridepublic void run() {while (true) {System.out.println("Thread is running");try {Thread.sleep(1000);} catch (InterruptedException e) {e.printStackTrace();}}}
}public class Demo {public static void main(String[] args) {MyThread thread = new MyThread();thread.start();  // 啟動線程}
}

2. 通過實現 Runnable?接口

class MyRunnable implements Runnable {@Overridepublic void run() {while (true) {System.out.println("Thread is running");try {Thread.sleep(1000);} catch (InterruptedException e) {e.printStackTrace();}}}
}public class Demo {public static void main(String[] args) {MyRunnable myRunnable = new MyRunnable();Thread thread = new Thread(myRunnable);thread.start();  // 啟動線程}
}

3. 使用 Lambda 表達式

    Thread y = new Thread(() -> {while (true){System.out.println("one Thread");try {Thread.sleep(1000);} catch (InterruptedException e){e.printStackTrace();throw new RuntimeException(e);}}},"線程一"); // lambda 表達式寫法
//        y.setDaemon(true); // 設置為后臺線程y.start(); // 啟動線程

3.如何簡單使用jconsloe去查看創建好的線程

JConsole 是一個 Java 監控工具,用于監控 Java 應用程序的運行時性能,它能夠提供線程、內存、垃圾回收等信息。通過 JConsole,我們可以查看程序的線程狀態、CPU 使用情況等,有助于調試和優化程序。

我們可以在JDK中找到它,如圖

示例代碼?

public class demo2
{public static void main(String[] args) throws InterruptedException {
//        Thread t = new MyThread();
//        t.start();Runnable runnable = new MyRun();Thread t = new Thread(runnable);
//        t.start();Thread y = new Thread(() -> {while (true) {System.out.println("one Thread");try {Thread.sleep(1000);} catch (InterruptedException e) {e.printStackTrace();throw new RuntimeException(e);}}}, "線程一"); // lambda 表達式寫法
//        y.setDaemon(true); // 設置為后臺線程y.start(); // 啟動線程while (true) {System.out.println("soyo");Thread.sleep(1000);}}}

打開jconsloe?

即可查看

結尾?

博客的內容就到這,這不是隨便水的,好歹結合了筆者自己的思考,希望有人能看到這里吧,我會很感謝的!

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

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

相關文章

【ISO 14229-1:2023 UDS診斷(ECU復位0x11服務)測試用例CAPL代碼全解析④】

ISO 14229-1:2023 UDS診斷【ECU復位0x11服務】_TestCase04 作者:車端域控測試工程師 更新日期:2025年02月17日 關鍵詞:UDS診斷協議、ECU復位服務、0x11服務、ISO 14229-1:2023 TC11-004測試用例 用例ID測試場景驗證要點參考條款預期結果TC…

3.10 實戰Hugging Face Transformers:從文本分類到模型部署全流程

實戰Hugging Face Transformers:從文本分類到模型部署全流程 一、文本分類實戰:IMDB電影評論情感分析 1.1 數據準備與預處理 from datasets import load_dataset from transformers import AutoTokenizer # 加載IMDB數據集 dataset = load_dataset("imdb") …

【人工智能】釋放數據潛能:使用Featuretools進行自動化特征工程

《Python OpenCV從菜鳥到高手》帶你進入圖像處理與計算機視覺的大門! 解鎖Python編程的無限可能:《奇妙的Python》帶你漫游代碼世界 特征工程是機器學習流程中至關重要的一步,它直接影響模型的性能。然而,手動特征工程既耗時又需要領域專業知識。Featuretools是一個強大的…

MybaitsPlus學習筆記(二)基本CURD

目錄 一、BaseMapper 二、常用實例 1、插入 2、刪除 3、修改 4、查詢 三、IService 四、 IService中的一些方法測試 一、BaseMapper MyBatis-Plus中的基本CRUD在內置的BaseMapper中都已得到了實現,我們可以直接使用,接口如 下: publ…

設計模式之適配模式是什么?以及在Spring AOP中的攔截器鏈的使用源碼解析。

前言 本文涉及到適配模式的基本用法,以及在Spring AOP中如何使用,首先需要了解適配模式的工作原理,然后結合Spring AOP的具體實現來詳細詳細解析源碼。 首先,適配模式,也就是Adapter Pattern,屬于結構型設計…

【C++】36.C++IO流

文章目錄 1. C語言的輸入與輸出2. 流是什么3. CIO流3.1 C標準IO流3.2 C文件IO流 4. stringstream的簡單介紹 1. C語言的輸入與輸出 C語言中我們用到的最頻繁的輸入輸出方式就是scanf ()與printf()。 scanf(): 從標準輸入設備(鍵盤)讀取數據,并將值存放在變量中。pri…

JavaScript表單介紹

一、表單的基本概念 在網頁開發里&#xff0c;表單是實現用戶與網頁交互的關鍵組件&#xff0c;用于收集用戶輸入的數據&#xff0c;JavaScript 則能為表單增添強大的交互性和功能性。表單在 HTML 里通過 <form> 標簽創建&#xff0c;包含多種表單元素&#xff0c;如文本…

哈希表(C語言版)

文章目錄 哈希表原理實現(無自動擴容功能)代碼運行結果 分析應用 哈希表 如何統計一段文本中&#xff0c;小寫字母出現的次數? 顯然&#xff0c;我們可以用數組 int table[26] 來存儲每個小寫字母出現的次數&#xff0c;而且這樣處理&#xff0c;效率奇高。假如我們想知道字…

昆蟲-目標檢測數據集(包括VOC格式、YOLO格式)

昆蟲-目標檢測數據集&#xff08;包括VOC格式、YOLO格式&#xff09; 數據集&#xff1a; 鏈接: https://pan.baidu.com/s/1tYb8s-AVJgSp7SGvqdWF9A?pwdt76a 提取碼: t76a 數據集信息介紹&#xff1a; 共有 6009 張圖像和一一對應的標注文件 標注文件格式提供了兩種&#x…

C++(23):unreachable

C++23在頭文件 "><utility>定義了std::unreachable(),用于指示編譯器,該段代碼不應該被允許,因此編譯器可以對該位置進行優化,如果一旦允許了該位置的代碼,行為未定義: #include <utility> #include <iostream>using namespace std;int func(…

備戰藍橋杯 Day1 回顧語言基礎

開啟藍橋杯刷題之路 Day1 回顧語言基礎 1.配置dev 工具->編譯選項->勾選編譯時加入以下命令->設定編譯器配置(release和debug)都要-> -stdc11 ->代碼生成/優化->代碼生成/優化->語言標準(-std)->ISO C11 ->代碼警告->顯示最多警告信息(-Wall)…

python學opencv|讀取圖像(七十五)人臉識別:Fisherfaces算法和LBPH算法

【1】引言 前序學習進程中&#xff0c;已經掌握了使用Eigenfaces算法進行的人臉識別。相關文章鏈接為&#xff1a; python學opencv|讀取圖像&#xff08;七十四&#xff09;人臉識別&#xff1a;EigenFaces算法-CSDN博客 在此基礎上&#xff0c;學習剩余兩種人臉識別算法&am…

React 前端框架介紹

什么是 React&#xff1f; React 是一個由 Facebook 開發并維護的開源 JavaScript 庫&#xff0c;用于構建用戶界面。它主要用于創建交互式用戶界Face&#xff08;UI&#xff09;&#xff0c;尤其是當數據變化時需要更新部分視圖時非常有效。React 的核心思想是組件化和聲明性…

包裝類的空指針異常

問題&#xff1a; Integer是引用對象&#xff0c;當初始化不進行賦值的時候是null,是null就不可以自動拆箱 實踐&#xff1a; public class Test {public static void main(String[] args) {Integer num null;//自動拆箱int i num;} } 會包異常信息&#xff1a; Excepti…

【Elasticsearch】檢索選定字段(Retrieve selected fields)

在 Elasticsearch 中&#xff0c;檢索選定字段&#xff08;Retrieve selected fields&#xff09;是一個重要的功能&#xff0c;用于優化查詢性能和減少數據傳輸量。以下是結合所有回答的詳細總結&#xff0c;涵蓋每種字段檢索方式的原理、應用場景、性能特點以及限制。 1._so…

【MySQL】 基本查詢(下)

歡迎拜訪&#xff1a;霧里看山-CSDN博客 本篇主題&#xff1a;【MySQL】 基本查詢(下) 發布時間&#xff1a;2025.2.18 隸屬專欄&#xff1a;MySQL 目錄 Update語法案例 Delete刪除數據語法案例 截斷表語法案例 插入查詢結果語法案例 聚合函數函數介紹案例 group by子句的使用語…

docker 基礎命令使用(ubuntu)

docker 狀態查詢 docker ps docker ps -adocker --version docker info docker --help docker run --help docker ps --help ...docker 操作鏡像命令 docker imagesdocker rmi 鏡像id/鏡像名docker 操作容器命令 docker ps docker ps -adocker run 命令 # 端口映射 -p 參數…

idea 2023.3.7常用插件

idea 2023.3.7常用插件 文檔 idea 2019.3常用插件idea 2023.3.7常用插件 idea 2023.3.7常用插件 插件名稱插件版本說明1AceJump3.5.9AceJump允許您快速將插入符號導航到編輯器中可見的任何位置。只需按“ctrl&#xff1b;”&#xff0c;鍵入一個字符&#xff0c;然后在Ace …

基于Flask的廣西高校輿情分析系統的設計與實現

【Flask】基于Flask的廣西高校輿情分析系統的設計與實現&#xff08;完整系統源碼開發筆記詳細部署教程&#xff09;? 目錄 一、項目簡介二、項目界面展示三、項目視頻展示 一、項目簡介 該系統綜合運用Python、Flask框架及多種數據處理與可視化工具開發&#xff0c;結合Boot…

用什么辦法能實現ubuntu里面運行的自己開發的python程序能自動升級。

要實現Ubuntu中自己開發的Python程序自動升級&#xff0c;可以通過以下幾種方式&#xff1a; 1. 使用 Git 倉庫 定時任務 如果你的Python程序托管在Git倉庫中&#xff0c;可以通過定時拉取最新代碼來實現自動升級。 步驟&#xff1a; 確保Python程序在Git倉庫中。在Ubuntu上…