亚洲乱码中文字幕综合,中国熟女仑乱hd,亚洲精品乱拍国产一区二区三区,一本大道卡一卡二卡三乱码全集资源,又粗又黄又硬又爽的免费视频

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

 更新時間: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)建一個無返回結(jié)果的任務(wù)線程

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

一:Runnable 示例

? 創(chuàng)建一個無返回結(jié)果的任務(wù)線程,so eazy !!!!

public static void main(String[] args) {
        new Thread(new Runnable() {
            @Override
            public void run() {
                System.out.println(Thread.currentThread().getName() + "我是一個無返回結(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個接口
    ........省略.........
	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è)置異常時的結(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òu)造函數(shù)方法

2 9個構(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)文章

  • 基于redis setIfAbsent的使用說明

    基于redis setIfAbsent的使用說明

    這篇文章主要介紹了基于redis setIfAbsent的使用說明,具有很好的參考價值,希望對大家有所幫助。一起跟隨小編過來看看吧
    2021-01-01
  • 深入解析Spring Cloud內(nèi)置的Zuul過濾器

    深入解析Spring Cloud內(nèi)置的Zuul過濾器

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

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

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

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

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

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

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

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

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

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

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

    基于重定向RedirectAttributes的用法解析

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

    淺談用java實(shí)現(xiàn)事件驅(qū)動機(jī)制

    這篇文章主要介紹了淺談用java實(shí)現(xiàn)事件驅(qū)動機(jī)制,小編覺得挺不錯的,現(xiàn)在分享給大家,也給大家做個參考。一起跟隨小編過來看看吧
    2017-09-09
  • SpringBoot實(shí)戰(zhàn)之處理異常案例詳解

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

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

最新評論