摘要:接口接口允許我們在線程執(zhí)行的時候有返回值,以及拋出異常線程的停止類中的個停止方法三者區(qū)別將線程標記為中斷返回線程當前的中斷狀態(tài),不清除線程的中斷標記返回線程當前的中斷狀態(tài),并清除線程的中斷標記與本質(zhì)都是調(diào)用了的。
1、通過繼承Thread類
public static class MThread extends Thread{ @Override public void run() { System.out.println(this.getName() + " start"); } } public static void main(String[] args){ new MThread().start(); }
2、通過實現(xiàn)Runnable接口實現(xiàn)
public static class MRunnable implements Runnable { @Override public void run() { System.out.println(Thread.currentThread().getName() +" start"); } } public static void main(String[] args){ new Thread(new MRunnable()).start(); }
3、創(chuàng)建可拋異常且有返回值的線程任務
public static class MCallAble implements Callable{ @Override public String call() throws Exception { return Thread.currentThread().getName() + " 測試"; } } public static void main(String[] args) throws ExecutionException, InterruptedException { FutureTask task = new FutureTask<>(new MCallAble()); Thread thread = new Thread(task); thread.start(); System.out.println(task.get()); }
解釋:
1、FutureTask的繼承類圖
因為FutureTask最終實現(xiàn)的是Runnable接口,因此FutureTask可以直接放在Thread中執(zhí)行。
2、Callable接口
Callable接口允許我們在線程執(zhí)行的時候有返回值,以及拋出異常!
4、線程的停止
①Thread類中的3個停止方法:
public void interrupt() public static boolean interrupted() public boolean isInterrupted()
②三者區(qū)別:
public void interrupt()
將線程標記為中斷
public boolean isInterrupted() { return isInterrupted(false); }
返回線程當前的中斷狀態(tài),不清除線程的中斷標記
public static boolean interrupted() { return currentThread().isInterrupted(true); }
返回線程當前的中斷狀態(tài),并清除線程的中斷標記
interrupted() 與 isInterrupted() 本質(zhì)都是調(diào)用了 native的 isInterrupted()。interrupted()清除了標記, isInterrupted()不清楚標記。
③中斷示例代碼
static class Mclass implements Runnable { @Override public void run() { while (!Thread.interrupted()) { System.out.println(Thread.currentThread().getName() + " start "); } } } public static void main(String[] args) { Thread thread1 = new Thread(new Mclass()); Thread thread2 = new Thread(new Mclass()); thread1.start(); thread2.start(); thread1.interrupt(); }
文章版權歸作者所有,未經(jīng)允許請勿轉載,若此文章存在違規(guī)行為,您可以聯(lián)系管理員刪除。
轉載請注明本文地址:http://m.specialneedsforspecialkids.com/yun/76681.html
摘要:最近聽很多面試的小伙伴說,網(wǎng)上往往是一篇一篇的多線程的文章,除了書籍沒有什么學習多線程的一系列文章。將此線程標記為線程或用戶線程。 最近聽很多面試的小伙伴說,網(wǎng)上往往是一篇一篇的Java多線程的文章,除了書籍沒有什么學習多線程的一系列文章。但是僅僅憑借一兩篇文章很難對多線程有系統(tǒng)的學習,而且面試的時候多線程這方面的知識往往也是考察的重點,所以考慮之下決定寫一系列關于Java多線程的文章...
摘要:和方法用來設置線程是否成為守護線程和判斷線程是否是守護線程。守護線程依賴于創(chuàng)建它的線程,隨它的消亡而消亡。使用提供的方法,提醒線程終止,但是否真正終止由線程自己決定。參考實戰(zhàn)高并發(fā)程序設計多線程干貨系列一多線程基礎 一、如何創(chuàng)建多線程 1、繼承Thread類 public class MyThread extends Thread { @Override public ...
摘要:原文鏈接解決了什么問題使用模型來克服傳統(tǒng)面向對象編程模型的局限性,并應對高并發(fā)分布式系統(tǒng)所帶來的挑戰(zhàn)。在某些情況,這個問題可能會變得更糟糕,工作線程發(fā)生了錯誤但是其自身卻無法恢復。 這段時間由于忙畢業(yè)前前后后的事情,拖更了很久,表示非常抱歉,回歸后的第一篇文章主要是看到了Akka最新文檔中寫的What problems does the actor model solve?,閱讀完后覺...
摘要:包括等,它們共同維護了一個事件與事件處理器的映射表,用來處理各個事件。例如內(nèi)部包含一個中央異步調(diào)度器,并注冊了等一系列事件事件處理器,由中央異步調(diào)度器統(tǒng)一管理和調(diào)度。當狀態(tài)機轉換到最終狀態(tài)時,則退出。 大數(shù)據(jù)夢工廠( 0011 - YARN核心設計解析)1 - YARN RPC架構設計YARN RPC Serv...
閱讀 2529·2021-09-24 10:29
閱讀 3810·2021-09-22 15:46
閱讀 2580·2021-09-04 16:41
閱讀 2986·2019-08-30 15:53
閱讀 1265·2019-08-30 14:24
閱讀 3058·2019-08-30 13:19
閱讀 2174·2019-08-29 14:17
閱讀 3526·2019-08-29 12:55