Java多線程入門案例詳解:繼承Thread類實現線程

?本文通過一個簡單案例,講解如何通過繼承 Thread 類來實現多線程程序,并詳細分析了代碼結構與運行機制。


一、前言

在 Java 中,實現多線程主要有兩種方式:

  • 繼承 Thread

  • 實現 Runnable 接口

本文以繼承 Thread 類為例,通過一個簡單的例子來帶大家理解線程的基本創建與啟動流程。


二、示例代碼

下面是本次講解的完整代碼:

package thread.test;// 定義一個繼承自 Thread 類的 MyThread2 類
class MyThread2 extends Thread {// 重寫 run() 方法,定義線程執行的任務@Overridepublic void run() {// 無限循環,讓線程持續執行while (true) {// 打印 "hello thread"System.out.println("hello thread");// 讓當前線程休眠 1 秒鐘try {Thread.sleep(1000);} catch (InterruptedException e) {// 處理線程被中斷的異常throw new RuntimeException(e);}}}
}public class ThreadDemo2 {public static void main(String[] args) {// 創建 MyThread2 類的實例Thread myThread2=new MyThread2();// 調用 start() 方法啟動新線程myThread2.start();// 主線程中的無限循環while (true) {// 打印 "hello main"System.out.println("hello main");// 主線程也休眠 1 秒鐘try {Thread.sleep(1000);} catch (InterruptedException e) {// 處理線程被中斷的異常throw new RuntimeException(e);}}}}

三、代碼詳解

1. 定義線程類

通過繼承 Thread 類,并重寫 run() 方法,定義線程要執行的邏輯。

class MyThread2 extends Thread {@Overridepublic void run() {while (true) {System.out.println("hello thread");Thread.sleep(1000);}}
}
  • 通過 new 創建線程對象。

  • 調用 start() 方法來真正啟動一個新線程

    • start() 方法內部會調用底層操作系統開辟新線程,并最終執行 run() 方法。

    • 如果直接調用 run(),則只是普通的方法調用,不會開啟新線程!


3. 主線程與子線程并發執行

主線程本身也進入一個無限循環:

while (true) {System.out.println("hello main");Thread.sleep(1000);
}
  • 主線程也每秒打印一次 "hello main"

  • 這樣,主線程和子線程各自獨立運行,同時輸出不同的信息。


四、程序運行結果

運行程序后,控制臺將交替輸出:

hello main
hello thread
hello thread
hello main
hello main
hello thread
hello main
hello thread
hello main
hello thread
hello main
hello thread
hello main
hello thread
hello main
hello thread
hello main
hello thread
^C進程已結束,退出代碼為 130 (interrupted by signal 2:SIGINT)

但由于線程調度由操作系統控制,因此有時候輸出順序不一定完全規律,比如連續兩次出現 "hello thread""hello main" 都是正常的。


五、注意事項

  • 線程安全:本例子中各線程互不干擾。但在實際開發中,如果多個線程操作共享資源,需要考慮線程安全問題。

  • 優雅地處理中斷:在捕獲 InterruptedException 后,實際項目中建議打斷循環優雅退出,而不是簡單地拋出異常。

  • 線程銷毀:本例代碼是無限循環,因此線程不會主動退出,實際開發中應該根據業務邏輯合理控制線程生命周期。


六、總結

通過繼承 Thread 類,我們可以快速創建并啟動一個新線程,但這種方式有一定局限性,比如:

  • Java 單繼承的局限(一個類只能繼承一個父類)

  • 擴展性較差

因此,在實際開發中,更推薦實現 Runnable 接口來創建線程,能夠讓代碼更加靈活、解耦。

不過,對于初學者來說,通過繼承 Thread 來理解線程基本運行原理是非常重要的一步!

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

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

相關文章

Netty在線客服系統落地方案

本文不講然后代碼方面的東西,只聊方案!! 這方案基于 Spring Boot 2.6、Netty、MyBatis Plus、Redis 構建的一套支持 單體應用 的在線客服系統。 系統支持客戶自由與后臺客服實時聊天、客服未在線釘釘提醒通知客服、消息已讀未讀標記、消息已…

SDK游戲盾、高防IP、高防CDN三者的區別與選型指南

在網絡安全防護領域,SDK游戲盾、高防IP和高防CDN是常見的解決方案,但各自的功能定位、技術實現和適用場景差異顯著。本文將通過對比核心差異,幫助您快速理解三者特點并選擇適合的防護方案。 一、核心功能定位 SDK游戲盾 功能核心&#xff1a…

GRPO有什么缺點,如何改進?

一、GRPO的核心原理與設計目標 Group Relative Policy Optimization(GRPO)是DeepSeek團隊提出的一種強化學習算法,旨在解決傳統PPO(Proximal Policy Optimization)在大語言模型(LLM)訓練中的資源消耗問題。其核心創新在于 通過組內相對獎勵替代價值函數(Critic Model)…

登高架設作業指的是什么?有什么安全操作規程?

登高架設作業是指在高處從事腳手架、跨越架架設或拆除的作業。具體包括以下方面: 腳手架作業 搭建各類腳手架,如落地式腳手架、懸挑式腳手架、附著式升降腳手架等,為建筑施工、設備安裝、高處維修等作業提供安全穩定的工作平臺。對腳手架進行…

前端實現商品放大鏡效果(Vue3完整實現)

前端實現商品放大鏡效果(Vue3完整實現) 前言 在電商類項目中,商品圖片的細節展示至關重要。放大鏡效果能顯著提升用戶體驗,允許用戶在不跳轉頁面的情況下查看高清細節。本文將基于Vue3實現一個高性能的放大鏡組件,完整…

【C++11特性】Lambda表達式(匿名函數)

一、函數對象 在C中,我們把所有能當作函數使用的對象當作函數對象。 一般來說,如果我們列出一個對象,而它的后面又跟有由花括號包裹的參數列表,就像fun(arg1, arg2, …),這個對象就被稱為函數對象。函數對象大致可分為…

大模型在肝硬化腹水風險預測及臨床方案制定中的應用研究

目錄 一、引言 1.1 研究背景與意義 1.2 研究目的與創新點 1.3 研究方法與數據來源 二、肝硬化及大模型相關理論基礎 2.1 肝硬化概述 2.2 大模型技術原理 2.3 大模型在醫療領域的應用現狀 三、大模型預測肝硬化腹水術前風險 3.1 術前風險因素分析 3.2 大模型預測術前…

MCP:如何通過模型控制推理助力AI模型實現“深度思考”?

MCP:如何通過模型控制推理助力AI模型實現“深度思考”? | Echo_Wish專欄 大家好,我是Echo_Wish,一個在人工智能和Python領域深耕的技術達人。今天咱們聊一個相對前沿的技術話題——MCP (Model Control Propagation),它是如何幫助AI模型“深度思考”,讓機器變得更加智能的…

c++初識

C 基礎入門 本人寫了很多c的服務器和客戶端代碼,這篇文章主要是想幫助初學者快速入門c.這樣就能快速閱讀我的源碼,其實不難c只是比c多了些特性,其實不難,你們就理解為有更多的方式修改函數和調用函數的方式和重寫函數 C 基礎入門…

JVM 生產環境問題定位與解決實戰(八):實戰篇——正則表達式回溯引發的CPU 100%

本文已收錄于《JVM生產環境問題定位與解決實戰》專欄,完整系列見文末目錄 1. 引言 在上一篇文章中,我們深入剖析了OSSClient泄漏引發的FullGC風暴全鏈路排查過程。本文聚焦另一個經典線上問題——正則表達式回溯導致的CPU 100%。在Java應用中&#xff0…

100天精通Python挑戰總覽 | 零基礎到應用實戰!

目錄 ? 為什么發起100天挑戰??整體學習路線規劃第一階段|基礎篇(第1天 - 第50天)第二階段|應用篇(第51天 - 第100天)Web開發篇爬蟲篇數據分析篇AI入門篇 🏆為什么這么劃分&#xf…

C++編譯之(5)-cmake/CMakeLists.txt的編譯使用教程

C++編譯之(5)-cmake/CMakeLists.txt的編譯使用教程 上一節,點這里 1、如何查看cmake的配置參數 那么如何查看當前配置的參數呢,我們可以使用-L參數 cmake .. -L # cmake .. -LAH完全使用命令行,則可以通過多次重復使用cmake … -DOPTION1=ON -D OPTION2=ON配置制定選項;并…

2025五一杯數學建模競賽思路助攻預定

2025五一杯數學建模競賽思路助攻預定(思路內容見文末名片) 一、概況 數學建模競賽是一項模擬面對實際問題尋求解決方案的活動,是一次近似 于“真刀真槍”的創新探索性實踐訓練。在豐富并活躍學生課外生活活動的同 時,數學建模競…

2025年綠色材料與制造技術國際學術會議(GMMT 2025)

重要信息 時間:2025年6月23-25日(英國時間) 地點:英國劍橋線下會場中國線上分會場 官網:www.icgmmt.com 部分 征稿主題 可生物降解材料垃圾和廢物的資源化綠色涂料與涂層 生物基聚合物的合成與應用 自然纖維增強復…

鴻蒙NEXT開發正則工具類RegexUtil(ArkTs)

import { FormatUtil } from ./FormatUtil;/*** 正則工具類* author CSDN-鴻蒙布道師* since 2025/04/27*/ export class RegexUtil {/*** 英文字母、數字和下劃線*/static readonly REG_GENERAL "^\\w$";/*** 數字*/static readonly REG_NUMBERS "^\\d$"…

Spring系列六:JdbcTemplate

JdbcTemplate 🦒看一個實際需求🦒官方文檔🦒基本介紹🦒使用實例📕需求說明📕代碼演示 🦒看一個實際需求 實際需求: 如果程序員就希望使用spring框架來做項目, spring框架如何處理對數據庫的操作…

來聊聊JVM中安全點的概念

文章目錄 寫在文章開頭詳解safepoint基本概念什么是安全點?為什么需要安全點JVM如何讓線程跑到最近的安全點線程什么時候需要進入安全點JVM如何保證線程高效進入安全點如何設置安全點用一次GC解釋基于安全點的STW實踐-基于主線程休眠了解安全點的工作過程代碼示例基于日志印證…

搭建 Spark YARN 模式集群指南

在大數據處理領域,Apache Spark 憑借其卓越的性能和易用性廣受青睞。而 YARN(Yet Another Resource Negotiator)作為 Hadoop 的資源管理框架,能高效管理集群資源。將 Spark 與 YARN 結合,以 YARN 模式搭建集群&#xf…

WPF之Label控件詳解

文章目錄 1. 引言2. Label控件基礎2.1 類繼承結構2.2 Label類定義 3. Label控件的核心屬性3.1 Content屬性3.2 Target屬性3.3 其他常用屬性 4. 標簽樣式與模板自定義4.1 簡單樣式設置4.2 使用Style對象4.3 觸發器使用4.4 使用ControlTemplate完全自定義 5. Label與表單控件交互…

一種改進的YOLOv11網絡,用于無人機視角下的小目標檢測

大家讀完覺得有幫助記得關注和點贊!!! 摘要 隨著無人機(UAV)和計算機視覺技術的快速發展,從無人機視角進行目標檢測已成為一個重要的研究領域。然而,無人機圖像中目標像素占比極小、物體尺度變…