Java-線程線程的創建方式

一.進程和線程

進程:進程是資源分配的基本單位,每個進程都有自己獨立的內存空間,可以看作是一個正在運行的程序實例

線程:線程是CPU調度的基本單位,屬于進程,一個進程可以包含多個線程。線程共享進程的內存空間和資源,但每個線程有自己獨立的棧和寄存器

多進程:在操作系統中,同時運行多個程序

多進程的好處:可以充分利用CPU,提高CPU的使用率

多線程:在同一個進程(應用程序)中同時執行多個線程

多線程的好處:提高進程的執行使用率,提高了CPU的使用率

注意:

  1. 在同一個時間點一個CPU中只可能有一個線程在執行

  2. 多線程不能提高效率、反而會降低效率,但是可以提高CPU的使用率

  3. 一個進程如果有多條執行路徑,則稱為多線程程序

  4. Java虛擬機的啟動至少開啟了兩條線程,主線程和垃圾回收線程

  5. 一個線程可以理解為進程的子任務

二.線程的實現方式

1.繼承Thread類

注意:

  1. 啟動線程是使用start方法而不是run方法

  2. 線程不能啟動多次,如果要創建多個線程,那么就需要創建多個Thread對象

class MyThread extends Thread {@Overridepublic void run() {System.out.println("Thread running by extending Thread class");}
}public class Main {public static void main(String[] args) {MyThread thread = new MyThread();thread.start();}
}

2.實現Runable接口

實現Runable接口的好處:

  1. 可以避免Java單繼承帶來的局限性

  2. 適合多個相同的程序代碼處理同一個資源的情況,把線程同程序的代碼和數據有效的分離,在實現解耦的同時,較好的體現了面向對象的設計思想

class MyRunnable implements Runnable {@Overridepublic void run() {System.out.println("Thread running by implementing Runnable interface");}
}public class Main {public static void main(String[] args) {Thread thread = new Thread(new MyRunnable());thread.start();}
}

3.實現Callable接口

前面兩種方式都是重寫run方法,而run方法沒有返回結果,也不能拋出異常,main方法不知道線程什么時候開啟和結束,也不知道返回值。

所以在jdk1.5引入實現Callable接口的方式創建線程,即可以獲取返回值,也可以拋出異常

import java.util.concurrent.Callable;
import java.util.concurrent.FutureTask;class MyCallable implements Callable<String> {@Overridepublic String call() throws Exception {return "Thread running by implementing Callable interface";}
}public class Main {public static void main(String[] args) throws Exception {FutureTask<String> futureTask = new FutureTask<>(new MyCallable());Thread thread = new Thread(futureTask);thread.start();System.out.println(futureTask.get());}
}

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

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

相關文章

Electron 中 license-keys 的完整集成方案

secure-electron-license-keys 是一個專門為 Electron 應用設計的 npm 包&#xff0c;用于實現離線許可證密鑰的創建、驗證和管理&#xff0c;幫助開發者保護應用程序&#xff0c;確保只有擁有合法許可證的用戶才能使用。以下是關于它的詳細介紹&#xff1a; 在 Electron 應用中…

AI推理的“靈魂五問”:直面2025算力鴻溝與中國的破局之路

摘要&#xff1a;2025年&#xff0c;AI產業的重心已從訓練全面轉向推理&#xff0c;但一場嚴峻的“體驗”危機正悄然上演。中美AI推理性能的巨大鴻溝&#xff0c;正讓國內廠商面臨用戶流失的切膚之痛。本文以問答形式&#xff0c;直面當前中國AI產業在推理“最后一公里”上最尖…

2025 TexLive+VScode排版IEEE TGRS論文

2025 TexLiveVScode排版IEEE TGRS論文 本文主要內容&#xff1a; 軟件安裝 latex 排版 TRGS 論文期間遇到的問題 清晰圖片導出 Latex公式、圖、表、算法、參考文獻的使用和引用 1. 前言 首先使用Overleaf網頁版排版&#xff0c;但是后期排版圖片太大&#xff0c;大小有限制&…

Redis數據組織方式

前言 Redis之所以高效&#xff0c;源自其優秀的架構設計。作為KV鍵值對存儲數據庫&#xff0c;數據的存儲放在了內存中&#xff0c;KV鍵值對的組織方式更是其高效的原因之一。本文介紹其數據組織方式。 一、總體架構 在使用Redis時&#xff0c;服務端接收多個客戶端的命令進行…

java組件安全vulhub靶場

>1--XStream1.打開靶場cd vulhub-master/xstream/CVE-2021-29505 docker up -d2.下載反序列化工具https://github.com/frohoff/ysoserial可以使用clone命令進行下載&#xff0c;也可以直接下載jar文件3.使用以下命令來開啟腳本&#xff0c;將是反彈shell的語句進行base64編碼…

UCMT部分復現

復現結果&#xff1a;88.03272&#xff0c;誤差在接受范圍內 補充信息 作者未解決后續報錯問題&#xff0c;不建議復現

IntelliJ IDEA 新手全方位使用指南

摘要本文面向剛接觸軟件開發、使用 IntelliJ IDEA 的新手&#xff0c;詳細介紹了 IDEA 的背景、版本區別、核心功能、運行原理、界面操作、項目管理、運行配置、以及 Git 版本控制基礎。文章突出實用操作和理解流程&#xff0c;幫助新手快速熟悉IDEA環境&#xff0c;順利完成項…

Python如何將圖片轉換為PDF格式

引言 在日常工作和學習中&#xff0c;我們經常需要將多張圖片合并成一個PDF文件&#xff0c;以便于分享或打印。Python提供了多種庫來實現這一需求&#xff0c;本文將詳細介紹三種常用的方法&#xff1a;img2pdf庫、Pillow庫和PyMuPDF庫&#xff0c;并附上完整的代碼示例。 方法…

Python如何合并兩個Excel文件

引言 在日常數據處理中&#xff0c;合并Excel文件是常見需求。Python提供了多種庫&#xff08;如pandas、openpyxl&#xff09;來實現這一操作。本文將詳細介紹兩種主流方法&#xff0c;并附上完整代碼示例&#xff0c;幫助您高效完成Excel合并任務。 方法一&#xff1a;使用pa…

【SQL進階】用EXPLAIN看透SQL執行計劃:從“盲寫“到“精準優化“

用EXPLAIN洞察SQL執行計劃&#xff1a;從"盲目編寫"到"精準優化" 很多開發者在編寫SQL時僅憑直覺&#xff0c;直到查詢超時才發現問題。MySQL內置的EXPLAIN工具能提前揭示查詢執行邏輯&#xff0c;幫助預防性能隱患。本文將帶你掌握EXPLAIN的核心用法&…

電影藝術好,電影知識得學

關于電影應該談什么導演風格、演員技術、劇本結構、票房、政治因素等。一、紙上談電影電影制作期&#xff1a;研發、前制、拍攝、后制、發行。一般成員只在某個時期出現。制片和導演會從頭監督到尾。研發期&#xff1a; 劇本概念發想與成形的時期。創作自由度比較大&#xff0c…

FPGA學習筆記——簡易的DDS信號發生器

目錄 一、任務 二、分析 三、ROM IP核配置 四、Visio圖 五、代碼 &#xff08;1&#xff09;.v代碼 &#xff08;2&#xff09;仿真代碼 六、仿真 七、實驗現象 一、任務 用串口模塊&#xff0c;用上位機發送指令&#xff0c;FPGA接收&#xff0c;然后輸出對應的波形&…

在NVIDIA Orin上用TensorRT對YOLO12進行多路加速并行推理時內存泄漏 (中)

接上篇 在NVIDIA Orin上用TensorRT對YOLO12進行多路加速并行推理時內存泄漏&#xff08;上&#xff09; 通過上篇的分析&#xff0c;發現問題在采集數據到傳入GPU之前的階段。但隨著新一輪長時間測試發現&#xff0c;問題依然存在。 如上圖&#xff0c;在運行20多分鐘內存開始…

計數組合學7.17(Murnaghan–Nakayama 規則 )

7.17 Murnaghan–Nakayama 規則 我們已經成功地用基 mλm_\lambdamλ?、hλh_\lambdahλ? 和 eλe_\lambdaeλ? 表示了 Schur 函數 sλs_\lambdasλ?。本節我們將考慮冪和對稱函數 pλp_\lambdapλ?。一個斜分劃 λ/μ\lambda / \muλ/μ 是連通的&#xff0c;如果其分拆圖…

使用 jlink 構建輕巧的自定義JRE

從 JDK 9 開始&#xff0c;Oracle JDK 和 OpenJDK 不再默認包含獨立的 JRE 目錄&#xff0c;而是提供了 jlink 工具&#xff08;Java 鏈接器&#xff09;&#xff0c;允許你根據需求自定義生成最小化的 JRE&#xff08;包含必要的模塊&#xff09;。以下是使用 jlink 生成 JRE …

[IOMMU]面向芯片/SoC驗證工程的IOMMU全景速覽

面向芯片/SoC驗證工程的IOMMU全景速覽 摘要:面向芯片/SoC 驗證工程的 IOMMU 全景速覽:包含基礎概念、主流架構要點(ARM SMMU、Intel VT?d、RISC?V IOMMU),Linux 軟件棧關系,SoC 上的驗證方法(功能、錯誤、性能、系統化流程和覆蓋),以及一個可用的“通用 IOMM…

Jenkins全鏈路教程——Jenkins用戶權限矩陣配置

在企業級CI/CD場景中&#xff0c;“權限混亂”往往比“構建失敗”更致命——測試員誤刪生產流水線、實習生修改關鍵插件配置、多團隊共用賬號導致責任無法追溯……這些問題&#xff0c;99%都能用權限矩陣徹底解決&#xff01;今天&#xff0c;我們不僅會拆解權限矩陣的底層邏輯…

庫函數蜂鳴器的使用(STC8)

使用庫函數控制蜂鳴器&#xff08;STC8&#xff09; 在STC8系列單片機中&#xff0c;可以通過庫函數或直接操作寄存器來控制蜂鳴器。以下是基于STC8庫函數的常用方法&#xff1a; GPIO板蜂鳴器 #include "GPIO.h" #include "Delay.h"void GPIO_config()…

redis8.0.3部署于mac

macOS11因版本過低&#xff0c;安裝redis時&#xff0c;Homebrew和源碼編譯兩種方式都無法成功。將操作系統升級至macOS15再安裝。Redis&#xff08;Remote Dictionary Server&#xff09;是一個開源的內存數據庫&#xff0c;遵守 BSD 協議&#xff0c;它提供了一個高性能的鍵值…

【和春筍一起學C++】(三十三)名稱空間的其他特性

目錄 嵌套式名稱空間 拓展——未命名的名稱空間 嵌套式名稱空間 示例代碼1&#xff1a; namespace electronicEquipment {namespace computer{double price 4999.0;string modelNumber;string name;}namespace ElectronicWatch{double price 99.0;string modelNumber;stri…