Java執行緒常用的操作有哪些?
執行緒的常用操作
設定執行緒名字:setName()
取得執行緒名稱:getName()
#執行緒唯一Id:getId()
// 自定义线程名称 String threadName = "threadName"; // 构造方法方式 Thread thread = new Thread(() -> { System.out.println("线程名=" + Thread.currentThread().getName()); },threadName); // set方法方式 // thread.setName(threadName); System.out.println("线程唯一Id=" + thread.getId());
執行緒啟動:start()
判斷執行緒是否存活:isAlive()
// 线程启动 thread.start(); System.out.println("是否为存活线程=" + thread.isAlive());
執行緒方法:run() /call()
執行緒啟動後會去呼叫的方法。執行緒要做什麼就在run/call方法寫,不需要直接調用,執行緒啟動後自己會去調用run() /call()。如果程式沒有啟動執行緒直接呼叫run/call,那麼就不屬於多執行緒編程,是屬於目前執行緒直接呼叫普通方法一樣。
取得目前執行緒物件:currentThread()
操作目前執行緒的非static方法,得先拿到執行緒物件才可以
// 获取当前线程对象 Thread currentThread = Thread.currentThread(); // 对当前线程做一些操作 System.out.println(currentThread.getName()); try { // sleep 静态方法则不需要 Thread.sleep(1000); } catch (InterruptedException e) { e.printStackTrace(); }
關於執行緒的狀態控制(生命週期)的操作可以參考上一篇文章。
守護線程(後台線程)
普通線程(使用者線程)的守護者,守護線程的任務是為其他的線程提供服務。如果進程中沒有了使用者線程,那麼守護線程也就沒有存在的意義,JVM也隨之結束。典型的守護線程有JVM的垃圾回收線程,作業系統的啟動也會啟動各種模組的守護線程。
設定執行緒為守護執行緒:setDaeman()
注意:該方法必須在start() 方法之前呼叫
public static void main(String[] args) { Thread thread = new Thread(() -> { System.out.println("线程名="+Thread.currentThread().getName()); try { Thread.sleep(1000); } catch (InterruptedException e) { e.printStackTrace(); } // 这一句不会打印出来,因为main线程(目前唯一的普通线程)等待1秒后已经结束了 System.out.println("守护线程的状态=" + Thread.currentThread().getState()); }); // 守护线程 thread.setDaemon(true); // 线程启动 thread.start(); System.out.println("是否为守护线程=" + thread.isDaemon()); }
執行緒串列化
執行join() 方法的執行緒進入等待喚醒狀態(WAITING),直到呼叫該方法的執行緒結束後再由等待喚醒狀態轉為可運行狀態(RUNNABLE)。 join() 方法是Thread類別中的方法,其底層是使用wait() 方法來實作執行緒等待,待執行緒isAlive()為false 時才
實作執行緒的串列化:一個執行緒呼叫另一個線程物件的join() 來實現線程串行化執行。
舉個例子:一道好菜
public class DemoCooking { public static void main(String[] args) { Thread mainThread = Thread.currentThread(); // 1.买菜 Thread buyThread = new Thread(new CookingThread(mainThread,"买菜"),"buyThread"); // 2.洗菜 Thread washThread = new Thread(new CookingThread(buyThread,"洗菜"),"washThread"); // 3.切菜 Thread cutThread = new Thread(new CookingThread(washThread,"切菜"),"cutThread"); // 4.炒菜 Thread scrambleThread = new Thread(new CookingThread(cutThread,"炒菜"),"scrambleThread"); // 不受线程启动顺序的影响 scrambleThread.start(); washThread.start(); cutThread.start(); buyThread.start(); // main线程先执行完才可以开始:买菜 System.out.println("开始准备……"); } public static class CookingThread implements Runnable{ private final Thread thread; private final String job; public CookingThread(Thread thread, String job){ this.thread = thread; this.job = job; } @Override public void run() { String name = Thread.currentThread().getName()+":"; try { thread.join(); System.out.println(name + job + "开始"); Thread.sleep(1000); System.out.println(name + job + "结束"); Thread.sleep(1000); // 偷懒下 } catch (InterruptedException e) { e.printStackTrace(); } } } }
執行結果:main > buyThread > washThread > cutThread > scrambleThread > 結束
開始準備……
buyThread:買菜開始
buyThread:買菜結束
washThread:洗菜開始
washThread:洗菜結束
cutThread:切菜開始
cutThread:切菜結束
scrambleThread:炒菜開始
scrambleThread:炒菜結束
執行緒優先權
設定目前執行緒的優先權,執行緒優先權越高,執行緒可能獲得執行的次數越多,Java執行緒的優先權以整數表示,優先權的範圍為1-10,預設為5。
setPriority(int)方法:設定執行緒的優先權。
getPriority方法:取得執行緒的優先權。
public static void main(String[] args) { Thread thread = new Thread(() -> { System.out.println("线程1"); }); thread.setPriority(10); Thread thread1 = new Thread(() -> { System.out.println("线程2"); }); thread1.setPriority(1); thread.start(); thread1.start(); System.out.println("线程默认的优先级为=" + Thread.currentThread().getPriority()); }
執行緒中斷
使用interrupt() 方法設定執行緒中斷標誌=true,讓執行緒受到「阻塞」時拋出一個中斷訊號。如果執行緒處於阻塞、等待喚醒或超時等待狀態(Object.wait, Thread.join和Thread.sleep)時,那麼它將接收到一個中斷異常(InterruptedException),從而提前被結束該狀態。反之,如果執行緒是處於「可運行」(RUNNABLE)狀態,那麼中斷標誌將沒有作用。
案例一:執行緒中斷有效
public static void main(String[] args) { Thread thread = new Thread(() -> { System.out.println("线程1"); try { // 闹钟1分钟后响 Thread.sleep(60000); System.out.println("闹钟响了"); } catch (InterruptedException e) { // 提前退出超时等待状态 System.out.println("发生异常,提前醒了,闹钟没响手动关了"); } System.out.println("继续执行该线程的后续程序……"); }); thread.setPriority(1); thread.start(); thread.interrupt(); System.out.println("main线程将thread 终端状态设置为 "+thread.isInterrupted()); }
執行結果:
##案例二:線程中斷無效#main執行緒將thread 終端機狀態設為true
執行緒1
發生異常,提前醒了,鬧鐘沒響手動關了
繼續執行該線程的後續程序……
public static void main(String[] args) { Thread thread1 = new Thread(() -> { System.out.println("线程" + Thread.currentThread().getName()); while (true) { System.out.print(Thread.currentThread().getState() + "\t"); } }); thread1.start(); thread1.interrupt(); }
以上是Java執行緒常用的操作有哪些?的詳細內容。更多資訊請關注PHP中文網其他相關文章!

熱AI工具

Undresser.AI Undress
人工智慧驅動的應用程序,用於創建逼真的裸體照片

AI Clothes Remover
用於從照片中去除衣服的線上人工智慧工具。

Undress AI Tool
免費脫衣圖片

Clothoff.io
AI脫衣器

Video Face Swap
使用我們完全免費的人工智慧換臉工具,輕鬆在任何影片中換臉!

熱門文章

熱工具

記事本++7.3.1
好用且免費的程式碼編輯器

SublimeText3漢化版
中文版,非常好用

禪工作室 13.0.1
強大的PHP整合開發環境

Dreamweaver CS6
視覺化網頁開發工具

SublimeText3 Mac版
神級程式碼編輯軟體(SublimeText3)

Java 8引入了Stream API,提供了一種強大且表達力豐富的處理數據集合的方式。然而,使用Stream時,一個常見問題是:如何從forEach操作中中斷或返回? 傳統循環允許提前中斷或返回,但Stream的forEach方法並不直接支持這種方式。本文將解釋原因,並探討在Stream處理系統中實現提前終止的替代方法。 延伸閱讀: Java Stream API改進 理解Stream forEach forEach方法是一個終端操作,它對Stream中的每個元素執行一個操作。它的設計意圖是處

PHP是一種廣泛應用於服務器端的腳本語言,特別適合web開發。 1.PHP可以嵌入HTML,處理HTTP請求和響應,支持多種數據庫。 2.PHP用於生成動態網頁內容,處理表單數據,訪問數據庫等,具有強大的社區支持和開源資源。 3.PHP是解釋型語言,執行過程包括詞法分析、語法分析、編譯和執行。 4.PHP可以與MySQL結合用於用戶註冊系統等高級應用。 5.調試PHP時,可使用error_reporting()和var_dump()等函數。 6.優化PHP代碼可通過緩存機制、優化數據庫查詢和使用內置函數。 7

PHP和Python各有優勢,選擇應基於項目需求。 1.PHP適合web開發,語法簡單,執行效率高。 2.Python適用於數據科學和機器學習,語法簡潔,庫豐富。

PHP適合web開發,特別是在快速開發和處理動態內容方面表現出色,但不擅長數據科學和企業級應用。與Python相比,PHP在web開發中更具優勢,但在數據科學領域不如Python;與Java相比,PHP在企業級應用中表現較差,但在web開發中更靈活;與JavaScript相比,PHP在後端開發中更簡潔,但在前端開發中不如JavaScript。

膠囊是一種三維幾何圖形,由一個圓柱體和兩端各一個半球體組成。膠囊的體積可以通過將圓柱體的體積和兩端半球體的體積相加來計算。本教程將討論如何使用不同的方法在Java中計算給定膠囊的體積。 膠囊體積公式 膠囊體積的公式如下: 膠囊體積 = 圓柱體體積 兩個半球體體積 其中, r: 半球體的半徑。 h: 圓柱體的高度(不包括半球體)。 例子 1 輸入 半徑 = 5 單位 高度 = 10 單位 輸出 體積 = 1570.8 立方單位 解釋 使用公式計算體積: 體積 = π × r2 × h (4

PHP和Python各有優勢,適合不同場景。 1.PHP適用於web開發,提供內置web服務器和豐富函數庫。 2.Python適合數據科學和機器學習,語法簡潔且有強大標準庫。選擇時應根據項目需求決定。

Java是熱門程式語言,適合初學者和經驗豐富的開發者學習。本教學從基礎概念出發,逐步深入解說進階主題。安裝Java開發工具包後,可透過建立簡單的「Hello,World!」程式來實踐程式設計。理解程式碼後,使用命令提示字元編譯並執行程序,控制台上將輸出「Hello,World!」。學習Java開啟了程式設計之旅,隨著掌握程度加深,可創建更複雜的應用程式。

PHP成為許多網站首選技術棧的原因包括其易用性、強大社區支持和廣泛應用。 1)易於學習和使用,適合初學者。 2)擁有龐大的開發者社區,資源豐富。 3)廣泛應用於WordPress、Drupal等平台。 4)與Web服務器緊密集成,簡化開發部署。
