Java中Runnable與Callable接口的區(qū)別詳解
預(yù)備知識(shí)
Java中的線程對(duì)象是Thread,新建線程也只有通過(guò)創(chuàng)建Thread對(duì)象的實(shí)例來(lái)創(chuàng)建。
先說(shuō)結(jié)論
1 Runnable沒(méi)有返回值的FunctionalInterface(jdk 1.8概念)接口,相反Callable是有返回值的FunctionalInterface接口
2 Runnable + Thread 創(chuàng)建一個(gè)無(wú)返回結(jié)果的任務(wù)線程
3 Runnable + Callable +Thread 創(chuàng)建一個(gè)有返回結(jié)果的任務(wù)線程
一:Runnable 示例
? 創(chuàng)建一個(gè)無(wú)返回結(jié)果的任務(wù)線程,so eazy !!!!
public static void main(String[] args) { new Thread(new Runnable() { @Override public void run() { System.out.println(Thread.currentThread().getName() + "我是一個(gè)無(wú)返回結(jié)果的任務(wù)線程"); } },"線程一:").start(); //start()開(kāi)啟任務(wù) }
二:Callable示例
2.1 JAVA異步編程之Callbacks與Futures模型
我是用Executors線程池的方式來(lái)創(chuàng)建的。
2.2 用最原始的方法
public class PrimitiveCallable implements Callable, Runnable { public static void main(String[] args) { //實(shí)現(xiàn) new Thread(new PrimitiveCallable(), "線程二:").start(); } @Override public void run() {//Runnable實(shí)現(xiàn) try { Object call = this.call(); System.out.println(call); } catch (Exception exception) { exception.printStackTrace(); } } @Override public Object call() throws Exception { //Callable 實(shí)現(xiàn) return "異步任務(wù)返回的結(jié)果!!!"; } }
2.3 FutureTask 一種jdk的實(shí)現(xiàn)方式
public class FutureTask<V> implements RunnableFuture<V> { //RunnableFuture 實(shí)現(xiàn)了以上2個(gè)接口 ........省略......... public void run() { //重寫(xiě)run實(shí)現(xiàn) if (state != NEW || !UNSAFE.compareAndSwapObject(this, runnerOffset, null, Thread.currentThread())) return; try { Callable<V> c = callable; //構(gòu)建對(duì)象是傳入的參數(shù) if (c != null && state == NEW) { V result; boolean ran; try { result = c.call(); //調(diào)用任務(wù)并返回結(jié)果 ran = true; } catch (Throwable ex) { result = null; ran = false; setException(ex); //設(shè)置異常時(shí)的結(jié)果 } if (ran) set(result); //設(shè)置結(jié)果 } } finally { runner = null; int s = state; if (s >= INTERRUPTING) handlePossibleCancellationInterrupt(s); } } ........省略......... }
小結(jié)
1 不要糾結(jié)有幾種創(chuàng)建線程的方法了,就一種即通過(guò)Thread,但Thread有9個(gè)構(gòu)造函數(shù)方法
2 9個(gè)構(gòu)造函數(shù)方法
public Thread() public Thread(Runnable target) Thread(Runnable target, AccessControlContext acc) public Thread(ThreadGroup group, Runnable target) public Thread(String name) public Thread(ThreadGroup group, String name) public Thread(Runnable target, String name) public Thread(ThreadGroup group, Runnable target, String name) public Thread(ThreadGroup group, Runnable target, String name, long stackSize)
到此這篇關(guān)于Java中Runnable與Callable接口的區(qū)別詳解的文章就介紹到這了,更多相關(guān)Java Runnable Callable接口內(nèi)容請(qǐng)搜索腳本之家以前的文章或繼續(xù)瀏覽下面的相關(guān)文章希望大家以后多多支持腳本之家!
- Java使用多線程批次查詢大量數(shù)據(jù)(Callable返回?cái)?shù)據(jù))方式
- Java通過(guò)Callable實(shí)現(xiàn)多線程
- Java多線程中Callable和Future的解讀
- Java中的Callable實(shí)現(xiàn)多線程詳解
- Java使用Callable接口實(shí)現(xiàn)多線程的實(shí)例代碼
- Java多線程實(shí)現(xiàn)之Callable詳解
- Java中Runnable和Callable分別什么時(shí)候使用
- 詳解Java中Callable和Future的區(qū)別
- Java使用Runnable和Callable實(shí)現(xiàn)多線程的區(qū)別詳解
- java面試常問(wèn)的Runnable和Callable的區(qū)別
- Java并發(fā)教程之Callable和Future接口詳解
- Java中callable的實(shí)現(xiàn)原理
相關(guān)文章
基于redis setIfAbsent的使用說(shuō)明
這篇文章主要介紹了基于redis setIfAbsent的使用說(shuō)明,具有很好的參考價(jià)值,希望對(duì)大家有所幫助。一起跟隨小編過(guò)來(lái)看看吧2021-01-01深入解析Spring Cloud內(nèi)置的Zuul過(guò)濾器
這篇文章主要給大家深入的介紹了Spring Cloud內(nèi)置的Zuul過(guò)濾器的相關(guān)資料,文中給大家介紹的很詳細(xì),相信對(duì)大家具有一定的參考價(jià)值,需要的朋友們下面來(lái)一起看看吧。2017-02-02java簡(jiǎn)單實(shí)現(xiàn)八叉樹(shù)圖像處理代碼示例
這篇文章主要介紹了java簡(jiǎn)單實(shí)現(xiàn)八叉樹(shù)圖像處理代碼示例,具有一定借鑒價(jià)值,需要的朋友可以參考下。2017-12-12springboot連接不同數(shù)據(jù)庫(kù)的寫(xiě)法詳解
這篇文章主要介紹了springboot連接不同數(shù)據(jù)庫(kù)的寫(xiě)法?,本文給大家介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或工作具有一定的參考借鑒價(jià)值,需要的朋友可以參考下2023-04-04spring @Scheduled注解的使用誤區(qū)及解決
這篇文章主要介紹了spring @Scheduled注解的使用誤區(qū)及解決,具有很好的參考價(jià)值,希望對(duì)大家有所幫助。如有錯(cuò)誤或未考慮完全的地方,望不吝賜教2021-11-11response.setContentType()參數(shù)以及作用詳解
這篇文章主要介紹了response.setContentType()參數(shù)以及作用詳解,本篇文章通過(guò)簡(jiǎn)要的案例,講解了該項(xiàng)技術(shù)的了解與使用,以下就是詳細(xì)內(nèi)容,需要的朋友可以參考下2021-08-08淺談?dòng)胘ava實(shí)現(xiàn)事件驅(qū)動(dòng)機(jī)制
這篇文章主要介紹了淺談?dòng)胘ava實(shí)現(xiàn)事件驅(qū)動(dòng)機(jī)制,小編覺(jué)得挺不錯(cuò)的,現(xiàn)在分享給大家,也給大家做個(gè)參考。一起跟隨小編過(guò)來(lái)看看吧2017-09-09SpringBoot實(shí)戰(zhàn)之處理異常案例詳解
這篇文章主要介紹了SpringBoot實(shí)戰(zhàn)之處理異常案例詳解,本篇文章通過(guò)簡(jiǎn)要的案例,講解了該項(xiàng)技術(shù)的了解與使用,以下就是詳細(xì)內(nèi)容,需要的朋友可以參考下2021-09-09