Javaee 多線程 --進程和線程之間的區別和聯系

文章目錄

  • 進程和線程
    • 進程
    • 線程
    • 進程和線程的區別
  • 創建線程的五種寫法
    • 繼承Thread,重寫run
    • 實現Runnable(接口),重寫run
    • 繼承Thread,重寫run,但是使用匿名內部類
    • 實現Runnable(接口),重寫run,但是使用匿名內部類
    • 使用lambda表達式
  • 請說明Thread類中run和start的區別

在這里插入圖片描述

進程和線程

進程

  1. 進程:是正在執行的程序,是資源分配的基本單位,具有獨立的地址空間
  2. 操作系統會為其分配CPU和內存

線程

  1. 線程:引入線程是為了解決進程開銷大,浪費資源的情景,并且多進程并發效率比較低
  2. 線程是調度執行的基本單位
  3. 線程之間會相互影響,一個線程掛了,會影響到整個進程都異常結束,線程也自然會結束

進程和線程的區別

  1. 進程包含線程,一個進程里面有多個線程或者是一個線程
  2. 進程和線程都是用來實現并發編程場景的,但是線程比進程更輕量和高效
  3. 同一個進程的線程之間共用同一份資源(內存和硬盤),省去了申請資源的開銷
  4. 進程和進程之間都是獨立存在的,不會相互影響,同一個進程中,線程和線程之間會相互影響(線程安全問題 + 線程出現異常)
  5. 進程是分配資源的基本單位,線程是調度執行的基本單位

創建線程的五種寫法

繼承Thread,重寫run

package Thread;class MyThread extends Thread{public void run(){// 這個是線程的入口方法while(true) {System.out.println("hello Thread!");try {Thread.sleep(1000);} catch (InterruptedException e) {throw new RuntimeException(e);}}}
}// 創建線程
public class Demo1 {public static void main(String[] args) throws InterruptedException {Thread thread = new MyThread();// 使用start方法可以間接調用run方法// start和 run都時Thread的成員// run 只是線程的入口(描述了線程要做什么事情)// start才是真正調用了系統的API,在系統中創建出了線程,讓線程調用 runthread.start();// 從這句開始程序就并發執行,一邊執行hello main,一邊執行hello Thread// 兵分兩路進行執行// 并發 == 并行 + 并發while(true){System.out.println("hello main!");Thread.sleep(1000);}// 先執行main,再執行的是Thread,先執行主線程}
}

實現Runnable(接口),重寫run

package Thread;class MyRunable implements Runnable{public void run(){while(true){System.out.println("hello thread!");try {Thread.sleep(1000);} catch (InterruptedException e) {throw new RuntimeException(e);}}}
}
public class Demo2 {public static void main(String[] args) throws InterruptedException {// 這個接口就是用來實現多態的Runnable myRunable = new MyRunable();Thread thread = new Thread(myRunable);thread.start();while(true){System.out.println("hello main!");Thread.sleep(1000);}}
}

繼承Thread,重寫run,但是使用匿名內部類

  1. 使用匿名內部類的方式創建出線程
package Thread;public class Demo3 {public static void main(String[] args) {Thread thread = new Thread(){public void run(){while(true){System.out.println("hello Thread!");try {Thread.sleep(1000);} catch (InterruptedException e) {throw new RuntimeException(e);}}}};thread.start();while(true){System.out.println("hello main!");try {Thread.sleep(1000);} catch (InterruptedException e) {throw new RuntimeException(e);}}}
}

實現Runnable(接口),重寫run,但是使用匿名內部類

package Thread;public class Demo4 {public static void main(String[] args) {// 法一:創建實例Runnable runnable = new Runnable(){public void run(){System.out.println("hello Thread!");try {Thread.sleep(1000);} catch (InterruptedException e) {throw new RuntimeException(e);}}};// 法二:創建匿名對象Thread thread = new Thread(new Runnable(){public void run(){System.out.println("hello Thread!");try {Thread.sleep(1000);} catch (InterruptedException e) {throw new RuntimeException(e);}}});// Thread thread = new Thread(runnable);thread.start();while(true){System.out.println("hello main!");try {Thread.sleep(1000);} catch (InterruptedException e) {throw new RuntimeException(e);}}}
}

使用lambda表達式

  1. lambda表達式相當于是匿名內部類的替換寫法
package Thread;public class Demo5 {public static void main(String[] args) {Thread thread = new Thread(()->{while(true){System.out.println("hello Thread!");try {Thread.sleep(1000);} catch (InterruptedException e) {throw new RuntimeException(e);}}});thread.start();while(true){System.out.println("hello main!");try {Thread.sleep(1000);} catch (InterruptedException e) {throw new RuntimeException(e);}}}
}

請說明Thread類中run和start的區別

  1. 從方法的區別,及運行結果的區別分別說明
    1. start方法可以用來啟動一個新的線程,run方法只是一個普通的方法,在主線程中執行
    2.start方法只能調用一次,run方法可以調用多次
    3.調用start方法會執行新的線程,新線程和主線程并發執行,run方法只是線程的入口,start方法調用了系統API,start方法創建出了線程,讓線程再調用run方法
    4.run方法和主線程同步執行,start方法啟動的線程和主線程異步執行
    5.run方法按順序執行,start方法調用的線程中的代碼執行順序由線程調度器決定,順序不確定

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

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

相關文章

企業如何讓內部視頻僅限指定域名播放,確保視頻不被泄露?

在數字化辦公時代,企業內部的培訓視頻、產品演示或機密會議錄像等敏感內容,一旦被非法傳播或泄露,可能帶來嚴重的商業風險。如何確保這些視頻只能在公司官網或指定域名播放,防止被惡意下載、盜鏈或二次傳播?今天介紹一…

端口映射原理操作詳解教程:實現外網訪問內網服務,本地路由器端口映射公網ip和軟件端口映射域名2種方法

端口映射作為一種不同網絡間通信的關鍵網絡技術,在遠程訪問和內外網連接服務需求日益增長的如今,理解端口映射的原理和設置方法是確保網絡服務可用性的必要技能。本文將深入探討端口映射的基本概念、路由器端口映射設置步驟以及無公網IP用端口映射軟件映…

【PyTorch】多對象分割項目

對象分割任務的目標是找到圖像中目標對象的邊界。實際應用例如自動駕駛汽車和醫學成像分析。這里將使用PyTorch開發一個深度學習模型來完成多對象分割任務。多對象分割的主要目標是自動勾勒出圖像中多個目標對象的邊界。 對象的邊界通常由與圖像大小相同的分割掩碼定義&#xf…

SSH 使用密鑰登錄服務器

用這種方法遠程登陸服務器的時候無需手動輸入密碼 具體步驟 客戶端通過 ssh-keygen 生成公鑰和私鑰 ssh-keygen -t rsa 生成的時候會有一系列問題,根據自己的需要選擇就行。生成的結果為兩個文件: 上傳公鑰至服務器,上述兩個文件一般在客戶…

MySQL 8.4 企業版啟用TDE功能和表加密

一、系統環境操作系統:Ubuntu 24.04 數據庫:8.4.4-commercial for Linux on x86_64 (MySQL Enterprise Server - Commercial)二、安裝TDE組件前提:檢查組件文件是否存在ls /usr/lib/mysql/plugin/component_keyring_encrypted_file.so1.配置全局清單文件…

【Altium designer】導出的原理圖PDF亂碼異常的解決方法

一、有些電源名字無法顯示或器件丟失 解決辦法 (1)首先AD18以及以上的新版本AD不存在該問題。 (2)其次AD17以及更舊版本的AD很可能遇到該問題,參考如下博客筆記進行操作即可: 大致的操作如下:DXP → Preferences → Schematic → Options里面“Render Text with GDI+”…

4.Ansible自動化之-部署文件到主機

4 - 部署文件到受管主機 實驗環境 先通過以下命令搭建基礎環境(創建工作目錄、配置 Ansible 環境和主機清單): # 在控制節點(controller)上創建web目錄并進入,作為工作目錄 [bqcontroller ~]$ mkdir web &a…

Vuex的使用

Vuex 超詳細使用教程(從入門到精通)一、Vuex 是什么?Vuex 是專門為 Vue.js 設計的狀態管理庫,它采用集中式存儲管理應用的所有組件的狀態。簡單來說,Vuex 就是一個"全局變量倉庫",所有組件都可以…

pytorch 數據預處理,加載,訓練,可視化流程

流程定義自定義數據集類定義訓練和驗證的數據增強定義模型、損失函數和優化器訓練循環,包括驗證訓練可視化整個流程模型評估高級功能擴展混合精度訓練?分布式訓練?{:width“50%” height“50%”} 定義自定義數據集類 # #1. 自定義數據集類 # class CustomImageD…

Prompt工程:OCR+LLM文檔處理的精準制導系統

在PDF OCR與大模型結合的實際應用中,很多團隊會發現一個現象:同樣的OCR文本,不同的Prompt設計會產生截然不同的提取效果。有時候準確率能達到95%,有時候卻只有60%。這背后的關鍵就在于Prompt工程的精細化程度。 🎯 為什…

RecSys:粗排模型和精排特征體系

粗排 在推薦系統鏈路中,排序階段至關重要,通常分為召回、粗排和精排三個環節。粗排作為精排前的預處理階段,需要在效果和性能之間取得平衡。 雙塔模型 后期融合:把用戶、物品特征分別輸入不同的神經網絡,不對用戶、…

spring聲明式事務,finally 中return對事務回滾的影響

finally 塊中使用 return 是一個常見的編程錯誤,它會: 跳過正常的事務提交流程。吞掉異常,使錯誤處理失效 導致不可預測的事務行為Java 中 finally 和 return 的執行機制:1. finally 塊的基本特性 在 Java 中,finally …

WPF 打印報告圖片大小的自適應(含完整示例與詳解)

目標:在 FlowDocument 報告里,根據 1~6 張圖片的數量, 自動選擇 2 行 3 列 的最佳布局;在只有 1、2、4 張時保持“占滿感”,打印清晰且不變形。規則一覽:1 張 → 占滿 23(大圖居中)…

【AI大模型前沿】百度飛槳PaddleOCR 3.0開源發布,支持多語言、手寫體識別,賦能智能文檔處理

系列篇章💥 No.文章1【AI大模型前沿】深度剖析瑞智病理大模型 RuiPath:如何革新癌癥病理診斷技術2【AI大模型前沿】清華大學 CLAMP-3:多模態技術引領音樂檢索新潮流3【AI大模型前沿】浙大攜手阿里推出HealthGPT:醫學視覺語言大模…

迅為RK3588開發板Android12 制作使用系統簽名

在 Android 源碼 build/make/target/product/security/下存放著簽名文件,如下所示:將北京迅為提供的 keytool 工具拷貝到 ubuntu 中,然后將 Android11 或 Android12 源碼build/make/target/product/security/下的 platform.pk8 platform.x509…

Day08 Go語言學習

1.安裝Go和Goland 2.新建demo項目實踐語法并使用git實踐版本控制操作 2.1 Goland配置 路徑**:** GOPATH workspace GOROOT golang 文件夾: bin 編譯后的可執行文件 pkg 編譯后的包文件 src 源文件 遇到問題1:運行 ‘go build awesomeProject…

Linux-文件創建拷貝刪除剪切

文章目錄Linux文件相關命令ls通配符含義touch 創建文件命令示例cp 拷貝文件rm 刪除文件mv剪切文件Linux文件相關命令 ls ls是英文單詞list的簡寫,其功能為列出目錄的內容,是用戶最常用的命令之一,它類似于DOS下的dir命令。 Linux文件或者目…

RabbitMQ:交換機(Exchange)

目錄一、概述二、Direct Exchange (直連型交換機)三、Fanout Exchange(扇型交換機)四、Topic Exchange(主題交換機)五、Header Exchange(頭交換機)六、Default Exchange(…

【實時Linux實戰系列】基于實時Linux的物聯網系統設計

隨著物聯網(IoT)技術的飛速發展,越來越多的設備被連接到互聯網,形成了一個龐大而復雜的網絡。這些設備從簡單的傳感器到復雜的工業控制系統,都在實時地產生和交換數據。實時Linux作為一種強大的操作系統,為…

第五天~提取Arxml中描述信息New_CanCluster--Expert

?? ARXML描述信息提取:挖掘汽車電子設計的"知識寶藏" 在AUTOSAR工程中,描述信息如同埋藏在ARXML文件中的金礦,而New_CanCluster--Expert正是打開這座寶藏的密鑰。本文將帶您深度探索ARXML描述信息的提取藝術,解鎖汽車電子設計的核心知識資產! ?? 為什么描述…