【多線程】Thread類的使用

目錄

1.概述

2.Thread的常見構造方法

3.Thread的幾個常見屬性

?4.啟動一個線程-start()

5.中斷一個線程

5.1通過共享的標記來進行溝通

5.2?調用 interrupt() 方法來通知

6.等待一個進程

?7.獲取當前線程引用

8.線程的狀態

8.1所有狀態

8.2線程狀態和轉移的意義


1.概述

Thread是jvm用來管理線程的一個類,即,在Java中,每個線程都有一個唯一的Thread對象與之關聯。

每個執行流,也需要有一個對象來描述,類似下圖所示,而 Thread 類的對象
就是用來描述一個線程執行流的,JVM 會將這些 Thread 對象組織起來,用于線程調度,線程管理

2.Thread的常見構造方法

方法說明
Thread()創建線程對象
Thread(Runnable target)使用 Runnable 對象創建線程對象
Thread(String name)創建線程對象,并命名
Thread(Runnable target, String name)使用 Runnable 對象創建線程對象,并命名

3.Thread的幾個常見屬性

屬性獲取方法
IDgetId()
名稱getName()
狀態getState()
優先級getPriority()
是否后臺線程isDaemon()
是否存活isAlive()
是否被中斷isInterrupted()

?4.啟動一個線程-start()

之前我們已經看到了如何通過覆寫 run 方法創建一個線程對象,但線程對象被創建出來并不意味著線程就開始運行了。
覆寫 run 方法是提供給線程要做的事情的指令清單線程對象可以認為是把 李四、王五叫過來了
而調用 start() 方法,就是喊一聲:”行動起來!“,線程才真正獨立去執行了。

調用 start 方法, 才真的在操作系統的底層創建出一個線程.即,run方法是一個行動指南,而真正讓這個線程創建并執行出來的,是strat()方法。
?

5.中斷一個線程

?對于正在run方法中執行的線程,我們一般有兩種方法來中斷;

5.1通過共享的標記來進行溝通

?

public class demo3 {public static boolean quit;public static void main(String[] args) throws InterruptedException {Thread t = new Thread(()->{while (!quit){System.out.println("線程在執行...");try {Thread.sleep(1000);} catch (InterruptedException e) {throw new RuntimeException(e);}}});t.start();Thread.sleep(5000);System.out.println("結束線程");quit=true;}
}

5.2?調用 interrupt() 方法來通知

public class demo3 {public static void main(String[] args) throws InterruptedException {Thread t = new Thread(()->{while (!Thread.currentThread().isInterrupted()){System.out.println("線程在執行...");try {Thread.sleep(1000);} catch (InterruptedException e) {throw new RuntimeException(e);}}});t.start();Thread.sleep(5000);System.out.println("結束線程");t.interrupt();}
}

1. 如果線程因為調用 wait/join/sleep 等方法而阻塞掛起,則以 InterruptedException 異常的形式通
知,清除中斷標志,當出現 InterruptedException 的時候, 要不要結束線程取決于 catch 中代碼的寫法. 可以選擇忽略這個異常, 也可以跳出循環結束線程.
2.否則,只是內部的一個中斷標志被設置,t可以通過Thread.interrupted() 判斷當前線程的中斷標志被設置,清除中斷標志Thread.currentThread().isInterrupted() 判斷指定線程的中斷標志被設置,不清除中斷標志這種方式通知收到的更及時,即使線程正在 sleep 也可以馬上收到。

6.等待一個進程

有時,我們需要等待一個線程完成它的工作后,才能進行自己的下一步工作。這時我們需要一個方法明確等待線程的結束

方法說明
public void join()等待線程結束
public void join(long millis)等待線程結束,最多等 millis 毫秒
public void join(long millis, int nanos)同理,但可以更高精度
import java.util.Random;public class demo1 {public static int tmp1;public static int tmp2;public static void main(String[] args) throws InterruptedException {int[] array = new int[10000000];Random random = new Random();for (int i = 0; i < array.length; i++) {int n = random.nextInt(100);array[i] = n;}long time1 = System.currentTimeMillis();Thread t1 = new Thread(()->{for (int i = 0; i < array.length; i+=2) {tmp1+=array[i];}});Thread t2 = new Thread(() ->{for (int i = 1; i < array.length; i+=2) {tmp2+=array[i];}});t1.start();t2.start();t1.join();t2.join();System.out.println("數組中的隨機數總和="+(tmp1+tmp2));long time2 = System.currentTimeMillis();System.out.println("程序運行時間=" + (time2-time1)+"ms" );}
}

如果把這兩個join注釋的話:

?7.獲取當前線程引用

方法說明
public static Thread currentThread();返回當前線程對象的引用
 public static void main(String[] args) {Thread t = Thread.currentThread();System.out.println(t.getName());}

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

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

相關文章

Relabel與Metic Relabel

Prometheus支持多種方式的自動發現目標&#xff08;targets&#xff09;&#xff0c;以下是一些常見的自動發現方式&#xff1a; 靜態配置&#xff1a;您可以在Prometheus配置文件中直接列出要監測的目標。這種方式適用于目標相對穩定的情況下&#xff0c;例如固定的服務器或設…

HCIA-RS基礎:動態路由協議基礎

摘要&#xff1a;本文介紹動態路由協議的基本概念&#xff0c;為后續動態路由協議原理課程提供基礎和引入。主要講解常見的動態路由協議、動態路由協議的分類&#xff0c;以及路由協議的功能和自治系統的概念。文章旨在優化標題吸引力&#xff0c;并通過詳細的內容夯實讀者對動…

自求導的方法實現線性回歸算法

線性回歸是一種常用的回歸算法&#xff0c;用于建立輸入變量和連續輸出變量之間的關系。傳統的線性回歸算法通常依賴于繁瑣的數學推導和梯度計算。但是&#xff0c;隨著深度學習的興起&#xff0c;自求導的方法逐漸成為實現線性回歸算法的有效途徑。本文將介紹如何使用自求導的…

視頻網站適合租用服務器嗎?

視頻網站適合租用服務器嗎&#xff1f; 談到服務器租用&#xff0c;在服務器租用市場中&#xff0c;通常比較常見的用戶群體有電商、外貿和視頻等網站。在這里相信很多用戶都有疑問&#xff1a;租用的服務器適不適合用來建立視頻網站呢&#xff1f;接下來我們一起來看看吧~ 首…

VMware安裝windows操作系統

一、下載鏡像包 地址&#xff1a;鏡像包地址。 找到需要的版本下載鏡像包。 二、安裝 打開VMware新建虛擬機&#xff0c;選擇用鏡像文件。將下載的鏡像包加載進去即可。

python opencv 邊緣檢測(sobel、沙爾算子、拉普拉斯算子、Canny)

python opencv 邊緣檢測&#xff08;sobel、沙爾算子、拉普拉斯算子、Canny&#xff09; 這次實驗&#xff0c;我們分別使用opencv 的 sobel算子、沙爾算子、拉普拉斯算子三種算子取進行邊緣檢測&#xff0c;然后后面又使用了Canny算法進行邊緣檢測。 直接看代碼&#xff0c;代…

論文導讀 | 10月專題內容精選:人的預測

編者按 本次論文導讀&#xff0c;編者選擇了10月份OR和MS上與"人的預測"有關的三篇文章&#xff0c;分別涉及群體智慧的提取&#xff0c;個體序列預測的評估&#xff0c;以及決策者對風險的扭曲感知在分布式魯棒優化中的應用。其中&#xff0c;從基于"生成式可能…

Django框架之csrf跨站請求

目錄 一、csrf跨站請求偽造詳解 二、csrf跨域請求偽造 【1】正常服務端 【2】釣魚服務端 三、csrf校驗 【介紹】 form表單中進行csrf校驗&#xff1a; 【1】form表單如何校驗 【2】ajax如何校驗 四、csrf相關裝飾器 【1】csrf_protect裝飾器&#xff1a; 【…

使用VUE3實現簡單顏色盤,吸管組件,useEyeDropper和<input type=“color“ />的使用

1.使用vueuse中的useEyeDropper來實現滴管的功能和使用input中的type"color"屬性來實現顏色盤 效果&#xff1a; 圖標觸發吸管 input觸發顏色盤 組件代碼部分 &#xff1a;<dropper> ---- vueuse使用 <template><div class"sRGBHexWrap fbc…

【Python百寶箱】第三維度的魔法:探索Python游戲世界

Python在游戲開發中的魔力 前言 游戲開發一直是計算機科學中最引人入勝和具有挑戰性的領域之一。隨著技術的不斷進步&#xff0c;開發者們尋找著更快、更靈活的工具來實現他們的創意。在這個探索的過程中&#xff0c;Python以其簡潔、易學和強大的特性成為了游戲開發的熱門選…

C#每天復習一個重要小知識day4:枚舉的概念/申明/使用

目錄 1.枚舉的概念&#xff1a; 2.申明枚舉和申明枚舉變量&#xff1a; 申明枚舉語法&#xff1a; 申明枚舉變量語法&#xff1a; 1.枚舉的概念&#xff1a; 枚舉是什么&#xff1f;枚舉是一個比較特別的存在&#xff0c;它是一個命名的整形常量的集合&#xff0c;一般用它…

Flume采集Kafka并把數據sink到OSS

安裝環境 Java環境, 略 (Flume依賴Java)Flume下載, 略Scala環境, 略 (Kafka依賴Scala)Kafak下載, 略Hadoop下載, 略 (不需要啟動, 寫OSS依賴) 配置Hadoop 下載JindoSDK(連接OSS依賴), 下載地址Github 解壓后配置環境變量 export JINDOSDK_HOME/usr/lib/jindosdk-x.x.x expo…

AWS CLI和EKSCTL的客戶端設置

文章目錄 小結過程安裝AWS CLI安裝EKSCTL在兩個Kubernetes Cluster之間切換 參考 小結 在Linux環境中對AWS CLI和EKSCTL的客戶端進行了設置。 過程 安裝AWS CLI 使用以下指令安裝&#xff1a; curl "https://awscli.amazonaws.com/awscli-exe-linux-x86_64.zip"…

Qt實現繪制自定義形狀

先創建一個繼承自QWidget的控件&#xff1a; class MyPainterWidget:public QWidget 重寫各種鼠標方法&#xff1a; protected:void paintEvent(QPaintEvent *) override;void mousePressEvent(QMouseEvent *e) override; //按下void mouseMoveEvent(QMouseEvent *e) …

Xposed hook失敗的原因

最近對Xposed的比較感興趣&#xff0c;于是照著網上的給的例子做了一個Xposed模塊&#xff0c;但是在安卓模擬器上死活不生效&#xff0c;最后研究發現了兩個問題導致&#xff1a; 1、XposedBridgeAPI-89.jar 需要放到項目的lib目錄下&#xff0c;而不是libs目錄 2、XposedBr…

HEVC-SCC rgb file input

關鍵字 csc allocateCSCBuffer&#xff08;&#xff09;-> m_apcPicYuvCSC xCheckRDCostIntraCSC():更簡單&#xff0c; enum ACTRDTestTypes { ACT_TWO_CLR 0, //two color space ACT_TRAN_CLR 1, //transformed color space ACT_ORG_CL…

補充:如何提高selenium的運行速度?

已經通讀該專欄文章的同學,或許對UI自動化測試有了一定的掌握,細心的同學肯定會發現一個問題,當用例量達到一定程度時,對于整體用例的執行速度肯定不會很滿意。除了應用多線程運行用例的方式加快速度,有沒有其他的方法呢? 今天告訴大家,方法是有的!也是本人新學的。即…

[PyTorch][chapter 66][強化學習-值函數近似]

前言 現實強化學習任務面臨的狀態空間往往是連續的,無窮多個。 這里主要針對這種連續的狀態空間處理。后面DQN 也是這種處理思路。 目錄&#xff1a; 1&#xff1a; 原理 2&#xff1a; 梯度更新 3&#xff1a; target 和 預測值 4 流程 一 原理 強化學習最重要的是得到 …

c++版本opencv計算灰度圖像的輪廓點

代碼 #include<iostream> #include<opencv.hpp>int main() {std::string imgPath("D:\\prostate_run\\result_US_20230804_141531\\mask\\us\\104.bmp");cv::Mat imgGray cv::imread(imgPath, 0);cv::Mat kernel cv::getStructuringElement(cv::MORPH…

任意分圓環下的 RLWE:如何產生正確的噪聲分布

參考文獻&#xff1a; [Con09] Conrad K. The different ideal[J]. Expository papers/Lecture notes. Available at: http://www.math.uconn.edu/~kconrad/blurbs/gradnumthy/different.pdf, 2009.[LPR10] Lyubashevsky V, Peikert C, Regev O. On ideal lattices and learn…