Callable(簡單)

HuDu發表於2020-08-27

1、可以有返回值
2、可以丟擲異常
3、方法不同,run()/ call()

Callable(簡單)

Callable(簡單)

Callable(簡單)

程式碼測試

package com.hudu.demo01.callable;

import java.util.concurrent.Callable;
import java.util.concurrent.ExecutionException;
import java.util.concurrent.FutureTask;

public class CallableTest {
    public static void main(String[] args) throws ExecutionException, InterruptedException {
//        new Thread(new MyThread()).start(); 類實現Runnable()介面

//        new Thread(new Runnable()).start();
//        new Thread(new FutureTask<V>()).start();//和上面等價,FutureTask是Runnable的實現類
//        new Thread(new FutureTask<V>(Callable)).start();//FutureTask又一個構造方法,引數是傳入一個Callable

//        new Thread().start();//怎麼啟動Callable
        MyThread thread = new MyThread();
        //適配類
        FutureTask futureTask = new FutureTask(thread);
        new Thread(futureTask,"A").start();
        new Thread(futureTask,"B").start();//結果會被快取,提高效率
        Integer o = (Integer)futureTask.get();//獲取Callable的返回結果,這個get方法會產生阻塞!把它放到最後
        //或者使用非同步通訊處理
        System.out.println(o);
    }
}

//class MyThread implements Runnable{
//
//    @Override
//    public void run() {
//
//    }
//}

class MyThread implements Callable<Integer> {


    @Override
    public Integer call() throws Exception {
        System.out.println("call()");//會列印幾個call
        return 12345;
    }
}

細節:
1、有快取
2、結果可能需要等待,會阻塞

本作品採用《CC 協議》,轉載必須註明作者和本文連結

相關文章