1. 程式人生 > >實現Callable介面,什麼時候呼叫call()方法

實現Callable介面,什麼時候呼叫call()方法

最近,專案中經常接觸執行緒,特別是在推送MQ的時候,都是使用執行緒來執行操作。在這裡,用一個簡單的例子來整理一個很簡單的使用方法。程式碼如下:

public class TestThread {
    public static void main(String[] args) {
        //使用main方法模擬Callable的call()方法的呼叫
        CallableTest callableTest = new CallableTest("我是阿T");
        ExecutorService executorService = Executors.newCachedThreadPool();
        System.out.println("開始執行call()方法!");
        Future<String> future = executorService.submit(callableTest);
        try {
            System.out.println("這裡是為了測試一下程式的執行。");
            System.out.println("呼叫call()方法返回的結果:"+future.get());
        } catch (InterruptedException e) {
            e.printStackTrace();
        } catch (ExecutionException e) {
            e.printStackTrace();
        }
    }
}
class CallableTest implements Callable{
    private String name;
    public CallableTest(String name){
        this.name = name;
    }
    @Override
    public Object call() throws Exception {
        System.out.println("呼叫Callable的call()方法進行邏輯處理開始!");
        return name;//call()方法執行完後返回的資料
    }
}

程式碼執行的結果:

開始執行call()方法!
這裡是為了測試一下程式的執行。
呼叫Callable的call()方法進行邏輯處理開始!
呼叫call()方法返回的結果:我是阿T

從結果中可以看到,線上程去執行call()方法的時候,程式是繼續往下走的,等到方法執行完畢之後,會返回name,而這個name在CallableTest例項化的時候,已經將“我是阿T”賦值給了name,所以,最後返回的結果是“我是阿T”。