JavaEE初階:多線程 - Thread 類的基本用法

上次我們了解了多線程的五種創建方法,今天來學習Thread的基本用法。

目錄

run和start

Thread常見的構造方法

Thread的幾個常見屬性

后臺線程

是否存活

線程終止

1.使用標志位

2.使用Thread自帶的標志

等待線程


run和start

首先需要理解Thread的run和start的區別:

run描述了線程要做的工作,start讓內核創建一個PCB,也就是讓操作系統新建一個線程。

如果不調用start,那么就不會在內核中有新的線程。

Thread常見的構造方法

第二、三、四個方法,其實都只是給線程起了個名字,線程默認的名字,叫做thread-0之類的,我們新建一個線程來看一下。

public class demo6 {public static void main(String[] args) {Thread t = new Thread(new Runnable() {@Overridepublic void run() {while(true){System.out.println("hello");}}},"mythread_demo");t.start();}
}

?通過jconsole可以看到我們自己命名的線程出現了。

Thread的幾個常見屬性

?

1.ID 是線程的唯一標識,不同線程不會重復

2.名稱是各種調試工具用到,這里是構造方法里取的名字

3.線程狀態?

4.優先級高的線程理論上來說更容易被調度到

5.關于后臺線程,需要記住一點:JVM會在一個進程的所有非后臺線程結束后,才會結束運行。

6.是否存活,即簡單的理解,為run方法是否運行結束了

7.線程的中斷問題,我們待會再說。

后臺線程

后臺進程,又叫做守護線程。

前臺線程,會阻止進程結束.前臺線程的工作沒做完,進程是完不了的。
后臺線程,不會阻止進程結束.后臺線程工作沒做完,進程也是可以結束的。

JVM必須在所有前臺進程結束后,才會結束運行。

代碼里手動創建的線程,默認都是前臺的.包括main 默認也是前臺的.
其他的jvm自帶的線程都是后臺的.
也可以手動的使用setDaemon設置成后臺線程.是后臺線程,就是守護線程。

t.setDaemon(true);

可以用這個代碼把t設置成后臺進程,這樣進程的結束就和t無關。

是否存活

isAlive是在判斷,當前系統里面的這個線程是不是真的有了。

在真正調用start之前,調用t.isAlive就是false。調用start之后,?isAlive就是true。

線程終止

終止的意思是,不是讓線程立即就停止,而是通知線程,你應該要停止了。是否真的停止取決于線程這里具體的代碼寫法。

1.使用標志位

在創建多線程的代碼前面,加上一個flag變量,作為標志位,最后由flag控制進程是否停止。這樣在最后停止時,就是由flag決定的。

但是如果在while(flag)中sleep休眠時,自變量這種方式不能及時響應

但是 sleep 在喚醒的時候,還會做一件事,把剛才設置的這個標志位再設置回 false(清空了標志位)

這就導致,當 sleep 的異常被 catch 完了之后, 循環還要繼續執行!!!

那么就是說,此時的flag并沒有起作用。

因此,這里只是告訴讓這個線程結束.這個線程是否要結束,啥時候結束都是線程內部自己代碼來決定的。

2.使用Thread自帶的標志

while(!Thread.currentThread().isInterrupted()){



t.interrupte就是終止t線程,main 線程調用t.interrupt()相當于main通知 t 你要終止了。

其實跟前面的flag差不過,只是把一個boolean操作封裝到Thread的方法里面了。


interrupt會做兩件事:

1.把線程內部的標志位(boolean)給設置成true。

2.如果線程在進行sleep,就會觸發異常,把sleep喚醒。

但是sleep在喚醒的時候,還會做一件事,把剛才設置的這個標志位再設置回false.(清空了標志位)

這就導致,當sleep的異常被catch完了之后,循環還要繼續執行。

那豈不是加不加這個interru都沒用?反正遇到線程sleep的時候總是會繼續運行?

此時我們可以在循環最后加一個break

?這樣子線程t就會立刻響應你的終止請求。

等待線程

線程是一個隨機調度的過程,等待線程,做的事情,就是在控制兩個線程的結束順序。

通過join來實現

?

?

?

?

?

?

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

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

相關文章

JavaWeb-Listener監聽器

目錄 監聽器Listener 1.功能 2.監聽器分類 3.監聽器的配置 4.ServletContext監聽 5.HttpSession監聽 6.ServletRequest監聽 監聽器Listener 1.功能 用于監聽域對象ServletContext、HttpSession和ServletRequest的創建,與銷毀事件監聽一個對象的事件&#x…

Python源碼05:使用Pyecharts畫詞云圖圖

**Pyecharts是一個用于生成 Echarts 圖表的 Python 庫。Echarts 是一個基于 JavaScript 的數據可視化庫,提供了豐富的圖表類型和交互功能。**通過 Pyecharts,你可以使用 Python 代碼生成各種類型的 Echarts 圖表,例如折線圖、柱狀圖、餅圖、散…

Glide 的超時控制相關處理

作者:newki 前言 Glide 相信大家都不陌生,各種源碼分析,使用介紹大家應該都是爛熟于心。但是設置 Glide 的超時問題大家遇到過沒有。 我遇到了,并且掉坑里了,情況是這樣的。 調用接口從網絡拉取用戶頭像&#xff0c…

3.微服務概述

1.大型網絡架構變遷 SOA與微服務最大的差別就是服務拆分的細度,目前大多數微服務實際上是SOA架構,真正的微服務應該是一個接口對應一個服務器,開發速度快、成本高; 微服務SOA能拆分的就拆分是整體的,服務能放一起的都…

自動駕駛HMI產品技術方案

版本變更 序號 日期 變更內容 編制人 審核人 文檔版本 1 2 1.

【計算機網絡】13、ARP 包:廣播自己的 mac 地址和 ip

機器啟動時,會向外廣播自己的 mac 地址和 ip 地址,這個即稱為 arp 協議。范圍是未經過路由器的部分,如下圖的藍色部分,范圍內的設備都會在本地記錄 mac 和 ip 的綁定信息,若有重復則覆蓋更新(例如先收到 ma…

【Spring】深入理解 Spring 事務及其傳播機制

文章目錄 一、Spring 事務是什么二、Spring 中事務的實現方法2.1 Spring 編程式事務(手動)2.1.1 編程式事務的使用演示2.1.2 編程式事務存在的問題 2.2 Spring 聲明式事務(自動)2.2.1 Transactional 作用范圍2.2.2 Transactional …

騰訊云GPU服務器GN7實例NVIDIA T4 GPU卡

騰訊云GPU服務器GN7實例搭載1顆 NVIDIA T4 GPU,8核32G配置,系統盤為100G 高性能云硬盤,自帶5M公網帶寬,系統鏡像可選Linux和Windows,地域可選廣州/上海/北京/新加坡/南京/重慶/成都/首爾/中國香港/德國/東京/曼谷/硅谷…

安卓純代碼布局開發游戲二:Android Studio開發環境搭建

1.Android Studio下載: Download Android Studio & App Tools - Android Developers 2.安裝 安裝過程非常簡單,找到下載包,一直點Next即可。 3.下載Android SDK 第一次進入Android Studio默認會先下載Android SDK,筆者下載的Android SDK存…

零售行業供應鏈管理核心KPI指標(三)

完美訂單滿足率和退貨率 完美訂單滿足率有三個方面的因素影響:訂單按時、足量、無損交貨。通常情況下零售企業追求線上訂單履行周期慢慢達到行業平均水平,就是交付的速度變快了,這個肯定是一件好事情,趨勢越來越好。 同時&#…

歐拉公式

文章目錄 歐拉公式e歐拉恒等式歐拉公式歐拉公式 推導2步驟1: 使用泰勒級數展開步驟2: 將 i x i x ix 代入 e x e^x ex 復平面上推導歐拉公式步驟1:復平面上的復數表示步驟2:定義復數的指數形式步驟3:求導步驟4:連接兩種形式步驟…

ubuntu安裝opencv4

apt 安裝 sudo apt install libopencv-dev python3-opencvpkg-config查看安裝 sudo apt install pkg-configpkg-config --modversion opencv4pkg-config --libs --cflags opencv4參考 如何在 Ubuntu 20.04 上安裝 OpenCV pkg-config 詳解

spark yarn 開啟動態資源分配

概念 不需要指定并發,只需要指定內存, 程序在運行后會動態調節并發數量,我們只需要設置一個上線即可 在spark 配置文件設置: spark.dynamicAllocation.enabled true spark.shuffle.service.enabled true 準備shuffer jar 將spar…

星際爭霸之小霸王之小蜜蜂(一)

目錄 前言 一、安裝pygame庫 1、pygame庫簡介 2、在windows系統安裝pygame庫 二 、搭建游戲框架 1、創建游戲窗口 2、改變窗口顏色 總結 前言 大家應該都看過或者都聽說過python神書“大蟒蛇”,上面有一個案例是《外星人入侵》,游戲介紹讓我想起了上…

炫酷UI前端效果的CSS生成工具

提升設計人員和前端開發人員的工作 推薦炫酷UI前端效果的CSS生成工具1.Neumorphism2.帶有漸變的圖標3.Interactions4.大型數據庫5.動畫6.Mask7.動畫按鈕8. 自定義形狀分隔線9.背景圖案10. SVG波浪推薦炫酷UI前端效果的CSS生成工具 1.Neumorphism 地址:https://neumorphism.i…

【Nginx17】Nginx學習:目錄索引、字符集與瀏覽器判斷模塊

Nginx學習:目錄索引、字符集與瀏覽器判斷模塊 今天要學習的內容有幾個還是大家比較常見的,所以學習起來也不會特別費勁。對于目錄的默認頁設置大家都不會陌生,字符集的設置也比較常見,而瀏覽器的判斷這一塊,可能有同學…

深入源碼分析kubernetes informer機制(二)Reflector

[閱讀指南] 這是該系列第二篇 基于kubernetes 1.27 stage版本 為了方便閱讀,后續所有代碼均省略了錯誤處理及與關注邏輯無關的部分。 文章目錄 Reflector是什么整體結構工作流程list拉取數據緩存resync操作watch監聽操作 總結 Reflector是什么 reflector在informer…

RocketMQ雙主雙從同步集群部署

🎈 作者:互聯網-小啊宇 🎈 簡介: CSDN 運維領域創作者、阿里云專家博主。目前從事 Kubernetes運維相關工作,擅長Linux系統運維、開源監控軟件維護、Kubernetes容器技術、CI/CD持續集成、自動化運維、開源軟件部署維護…

學習筆記十九:Pod常見的狀態和重啟策略

Pod常見的狀態和重啟策略 常見的pod狀態第一階段:第二階段:擴展: pod重啟策略測試Always重啟策略正常停止容器內的tomcat服務非正常停止容器里的tomcat服務 測試never重啟策略正常停止容器里的tomcat服務非正常停止容器里的tomcat服務 測試On…

Mac安裝opencv后無法導入cv2的解決方法

前提條件:以下兩個插件安裝成功 pip install opencv-python pip install --user opencv-contrib-python 注:直接用pip install opencv-contrib-python如果報錯,就加上“–user" 第一步: 設置–添加python解釋器 第二步&am…