亚洲激情专区-91九色丨porny丨老师-久久久久久久女国产乱让韩-国产精品午夜小视频观看

溫馨提示×

溫馨提示×

您好,登錄后才能下訂單哦!

密碼登錄×
登錄注冊×
其他方式登錄
點擊 登錄注冊 即表示同意《億速云用戶服務條款》

Java中Runnable與Callable接口有什么區別

發布時間:2023-03-28 15:26:22 來源:億速云 閱讀:98 作者:iii 欄目:開發技術

這篇文章主要介紹“Java中Runnable與Callable接口有什么區別”,在日常操作中,相信很多人在Java中Runnable與Callable接口有什么區別問題上存在疑惑,小編查閱了各式資料,整理出簡單好用的操作方法,希望對大家解答”Java中Runnable與Callable接口有什么區別”的疑惑有所幫助!接下來,請跟著小編一起來學習吧!

預備知識

Java中的線程對象是Thread,新建線程也只有通過創建Thread對象的實例來創建。

先說結論

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

2 Runnable + Thread 創建一個無返回結果的任務線程

3 Runnable + Callable +Thread 創建一個有返回結果的任務線程

一:Runnable 示例

創建一個無返回結果的任務線程,so eazy !!!!

public static void main(String[] args) {
        new Thread(new Runnable() {
            @Override
            public void run() {
                System.out.println(Thread.currentThread().getName() + "我是一個無返回結果的任務線程");
            }
        },"線程一:").start(); //start()開啟任務
    }

二:Callable示例

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

我是用Executors線程池的方式來創建的。

2.2 用最原始的方法

public class PrimitiveCallable implements Callable, Runnable {
    
    public static void main(String[] args) {
        //實現
        new Thread(new PrimitiveCallable(), "線程二:").start();
    }
    @Override
    public void run() {//Runnable實現
        try {
            Object call = this.call();
            System.out.println(call);
        } catch (Exception exception) {
            exception.printStackTrace();
        }
    }
    @Override
    public Object call() throws Exception { //Callable 實現
        return "異步任務返回的結果!!!";
    }
}

2.3 FutureTask 一種jdk的實現方式

public class FutureTask<V> implements RunnableFuture<V> { //RunnableFuture 實現了以上2個接口
    ........省略.........
	public void run() { //重寫run實現
        if (state != NEW ||
            !UNSAFE.compareAndSwapObject(this, runnerOffset,
                                         null, Thread.currentThread()))
            return;
        try {
            Callable<V> c = callable; //構建對象是傳入的參數
            if (c != null && state == NEW) {
                V result;
                boolean ran;
                try {
                    result = c.call(); //調用任務并返回結果
                    ran = true;
                } catch (Throwable ex) {
                    result = null;
                    ran = false;
                    setException(ex); //設置異常時的結果
                }
                if (ran)
                    set(result); //設置結果
            }
        } finally {
            runner = null;
            int s = state;
            if (s >= INTERRUPTING)
                handlePossibleCancellationInterrupt(s);
        }
    }
     ........省略.........
}

小結

1 不要糾結有幾種創建線程的方法了,就一種即通過Thread,但Thread有9個構造函數方法

2 9個構造函數方法

 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)

到此,關于“Java中Runnable與Callable接口有什么區別”的學習就結束了,希望能夠解決大家的疑惑。理論與實踐的搭配能更好的幫助大家學習,快去試試吧!若想繼續學習更多相關知識,請繼續關注億速云網站,小編會繼續努力為大家帶來更多實用的文章!

向AI問一下細節

免責聲明:本站發布的內容(圖片、視頻和文字)以原創、轉載和分享為主,文章觀點不代表本網站立場,如果涉及侵權請聯系站長郵箱:is@yisu.com進行舉報,并提供相關證據,一經查實,將立刻刪除涉嫌侵權內容。

AI

海晏县| 博兴县| 黑龙江省| 威远县| 伊宁市| 左贡县| 昌吉市| 安康市| 从化市| 台湾省| 谢通门县| 平原县| 双柏县| 城市| 白城市| 崇州市| 墨竹工卡县| 来宾市| 临澧县| 新化县| 简阳市| 平昌县| 南乐县| 新郑市| 文成县| 东光县| 庄浪县| 营山县| 中阳县| 正宁县| 池州市| 赤城县| 陆河县| 朔州市| 岳池县| 财经| 萍乡市| 长顺县| 伊春市| 拉孜县| 平陆县|