實現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”。