欧美bbbwbbbw肥妇,免费乱码人妻系列日韩,一级黄片

Java中Runnable與Callable接口的區(qū)別詳解

 更新時(shí)間:2023年03月28日 14:47:04   作者:愛(ài)我-中華  
這篇文章主要為大家詳細(xì)介紹了Java中Runnable與Callable接口的區(qū)別,文中的示例代碼講解詳細(xì),對(duì)我們學(xué)習(xí)Java有一定的幫助,需要的可以參考一下

預(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)文章希望大家以后多多支持腳本之家!

相關(guān)文章

  • 基于redis setIfAbsent的使用說(shuō)明

    基于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ò)濾器

    這篇文章主要給大家深入的介紹了Spring Cloud內(nèi)置的Zuul過(guò)濾器的相關(guān)資料,文中給大家介紹的很詳細(xì),相信對(duì)大家具有一定的參考價(jià)值,需要的朋友們下面來(lái)一起看看吧。
    2017-02-02
  • java簡(jiǎn)單實(shí)現(xiàn)八叉樹(shù)圖像處理代碼示例

    java簡(jiǎn)單實(shí)現(xiàn)八叉樹(shù)圖像處理代碼示例

    這篇文章主要介紹了java簡(jiǎn)單實(shí)現(xiàn)八叉樹(shù)圖像處理代碼示例,具有一定借鑒價(jià)值,需要的朋友可以參考下。
    2017-12-12
  • springboot連接不同數(shù)據(jù)庫(kù)的寫(xiě)法詳解

    springboot連接不同數(shù)據(jù)庫(kù)的寫(xiě)法詳解

    這篇文章主要介紹了springboot連接不同數(shù)據(jù)庫(kù)的寫(xiě)法?,本文給大家介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或工作具有一定的參考借鑒價(jià)值,需要的朋友可以參考下
    2023-04-04
  • spring @Scheduled注解的使用誤區(qū)及解決

    spring @Scheduled注解的使用誤區(qū)及解決

    這篇文章主要介紹了spring @Scheduled注解的使用誤區(qū)及解決,具有很好的參考價(jià)值,希望對(duì)大家有所幫助。如有錯(cuò)誤或未考慮完全的地方,望不吝賜教
    2021-11-11
  • 詳解lambda表達(dá)式foreach性能分析

    詳解lambda表達(dá)式foreach性能分析

    這篇文章主要介紹了詳解lambda表達(dá)式foreach性能分析,文中通過(guò)示例代碼介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價(jià)值,需要的朋友們下面隨著小編來(lái)一起學(xué)習(xí)學(xué)習(xí)吧
    2020-11-11
  • response.setContentType()參數(shù)以及作用詳解

    response.setContentType()參數(shù)以及作用詳解

    這篇文章主要介紹了response.setContentType()參數(shù)以及作用詳解,本篇文章通過(guò)簡(jiǎn)要的案例,講解了該項(xiàng)技術(shù)的了解與使用,以下就是詳細(xì)內(nèi)容,需要的朋友可以參考下
    2021-08-08
  • 基于重定向RedirectAttributes的用法解析

    基于重定向RedirectAttributes的用法解析

    這篇文章主要介紹了基于重定向RedirectAttributes的用法,具有很好的參考價(jià)值,希望對(duì)大家有所幫助。如有錯(cuò)誤或未考慮完全的地方,望不吝賜教
    2021-12-12
  • 淺談?dòng)胘ava實(shí)現(xiàn)事件驅(qū)動(dòng)機(jī)制

    淺談?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-09
  • SpringBoot實(shí)戰(zhàn)之處理異常案例詳解

    SpringBoot實(shí)戰(zhàn)之處理異常案例詳解

    這篇文章主要介紹了SpringBoot實(shí)戰(zhàn)之處理異常案例詳解,本篇文章通過(guò)簡(jiǎn)要的案例,講解了該項(xiàng)技術(shù)的了解與使用,以下就是詳細(xì)內(nèi)容,需要的朋友可以參考下
    2021-09-09

最新評(píng)論