最新国产好看的视频,伊人天堂AV在线,国产Aaaaaa视频,蜜臀视频在线观看一区,人妻av色图,密臀久久久精品影片,青青视频免费观看毛片,久草在线观看视,国产三级精品色情在线

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

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

預(yù)備知識

Java中的線程對象是Thread,新建線程也只有通過創(chuàng)建Thread對象的實(shí)例來創(chuàng)建。

先說結(jié)論

1 Runnable沒有返回值的FunctionalInterface(jdk 1.8概念)接口,相反Callable是有返回值的FunctionalInterface接口

2 Runnable + Thread 創(chuàng)建一個(gè)無返回結(jié)果的任務(wù)線程

3 Runnable + Callable +Thread 創(chuàng)建一個(gè)有返回結(jié)果的任務(wù)線程

一:Runnable 示例

? 創(chuàng)建一個(gè)無返回結(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è)無返回結(jié)果的任務(wù)線程");
            }
        },"線程一:").start(); //start()開啟任務(wù)
    }

二:Callable示例

2.1 JAVA異步編程之Callbacks與Futures模型 

我是用Executors線程池的方式來創(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() { //重寫run實(shí)現(xiàn)
        if (state != NEW ||
            !UNSAFE.compareAndSwapObject(this, runnerOffset,
                                         null, Thread.currentThread()))
            return;
        try {
            Callable<V> c = callable; //構(gòu)建對象是傳入的參數(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)建線程的方法了,就一種即通過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)容請搜索腳本之家以前的文章或繼續(xù)瀏覽下面的相關(guān)文章希望大家以后多多支持腳本之家!

相關(guān)文章

  • 如何更好的使用Java8中方法引用詳解

    如何更好的使用Java8中方法引用詳解

    在Java8中,我們可以直接通過方法引用來簡寫lambda表達(dá)式中已經(jīng)存在的方法,這種特性就叫做方法引用(Method Reference)。下面這篇文章主要給大家介紹了關(guān)于如何更好的使用Java8中方法引用的相關(guān)資料,需要的朋友可以參考下。
    2017-09-09
  • Java實(shí)戰(zhàn)在線選課系統(tǒng)的實(shí)現(xiàn)流程

    Java實(shí)戰(zhàn)在線選課系統(tǒng)的實(shí)現(xiàn)流程

    讀萬卷書不如行萬里路,只學(xué)書上的理論是遠(yuǎn)遠(yuǎn)不夠的,只有在實(shí)戰(zhàn)中才能獲得能力的提升,本篇文章手把手帶你用java+SSM+jsp+mysql+maven實(shí)現(xiàn)一個(gè)在線選課系統(tǒng),大家可以在過程中查缺補(bǔ)漏,提升水平
    2021-11-11
  • Spring注解中@Autowired和@Bean的區(qū)別詳解

    Spring注解中@Autowired和@Bean的區(qū)別詳解

    這篇文章主要詳細(xì)介紹了Spring注解中@Autowired和@Bean二者有什么區(qū)別,文中通過兩個(gè)注解的使用場景介紹了二者的區(qū)別,感興趣的同學(xué)可以參考閱讀
    2023-06-06
  • Java中的訪問修飾符詳細(xì)解析

    Java中的訪問修飾符詳細(xì)解析

    以下是對Java中的訪問修飾符進(jìn)行了詳細(xì)的分析介紹,需要的朋友可以過來參考下
    2013-09-09
  • Java效率提升神器jOOR

    Java效率提升神器jOOR

    這篇文章主要介紹了Java效率提升神器jOOR,jOOR是一個(gè)第三方庫,通過鏈?zhǔn)紻SL接口,簡化了反射過程,更多相關(guān)內(nèi)容組要的朋友可以參考一下
    2022-07-07
  • springboot配置resilience4j全過程

    springboot配置resilience4j全過程

    這篇文章主要介紹了springboot配置resilience4j全過程,具有很好的參考價(jià)值,希望對大家有所幫助,如有錯誤或未考慮完全的地方,望不吝賜教
    2024-05-05
  • 關(guān)于Lambda表達(dá)式的方法引用和構(gòu)造器引用簡的單示例

    關(guān)于Lambda表達(dá)式的方法引用和構(gòu)造器引用簡的單示例

    這篇文章主要介紹了關(guān)于Lambda表達(dá)式的方法引用和構(gòu)造器引用簡的單示例,方法引用與構(gòu)造器引用可以使?Lambda?表達(dá)式的代碼塊更加簡潔<BR>,需要的朋友可以參考下
    2023-04-04
  • java拋出異常與finally實(shí)例解析

    java拋出異常與finally實(shí)例解析

    這篇文章主要介紹了java拋出異常與finally實(shí)例解析,文中通過示例代碼介紹的非常詳細(xì),對大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價(jià)值,需要的朋友可以參考下
    2019-10-10
  • Java AbstractMethodError原因案例詳解

    Java AbstractMethodError原因案例詳解

    這篇文章主要介紹了Java AbstractMethodError原因案例詳解,本篇文章通過簡要的案例,講解了該項(xiàng)技術(shù)的了解與使用,以下就是詳細(xì)內(nèi)容,需要的朋友可以參考下
    2021-08-08
  • Java實(shí)現(xiàn)發(fā)送短信驗(yàn)證碼功能

    Java實(shí)現(xiàn)發(fā)送短信驗(yàn)證碼功能

    這篇文章主要為大家詳細(xì)介紹了Java實(shí)現(xiàn)發(fā)送短信驗(yàn)證碼功能,具有一定的參考價(jià)值,感興趣的小伙伴們可以參考一下
    2017-11-11

最新評論

漳浦县| 建湖县| 商丘市| 嘉荫县| 八宿县| 疏附县| 碌曲县| 两当县| 博乐市| 黔东| 如皋市| 扎兰屯市| 宁波市| 墨玉县| 礼泉县| 连南| 南岸区| 新昌县| 日土县| 汉中市| 浦城县| 清水县| 鹤山市| 西藏| 晋州市| 新余市| 洛川县| 陈巴尔虎旗| 柳江县| 太湖县| 滁州市| 阿鲁科尔沁旗| 敦化市| 黄大仙区| 苏尼特左旗| 吴堡县| 丰都县| 辉县市| 穆棱市| 改则县| 老河口市|