91超碰碰碰碰久久久久久综合_超碰av人澡人澡人澡人澡人掠_国产黄大片在线观看画质优化_txt小说免费全本

溫馨提示×

溫馨提示×

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

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

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

新乐市| 鹰潭市| 平南县| 焉耆| 巢湖市| 会同县| 宜宾市| 德阳市| 封丘县| 周宁县| 金湖县| 高阳县| 三河市| 松潘县| 集安市| 九寨沟县| 璧山县| 含山县| 雅江县| 海伦市| 广宁县| 奇台县| 霍山县| 西峡县| 尉犁县| 靖宇县| 兖州市| 丁青县| 安平县| 盐城市| 丰镇市| 乌苏市| 古浪县| 当雄县| 施秉县| 凤冈县| 尤溪县| 福鼎市| 扬中市| 洛南县| 贵溪市|