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