Given the code fragment:



class CallerThread implements Callable<String> {

    String str;

    public CallerThread(String s) {
        this.str = s;
    }

    public String call() throws Exception {
        return str.concat(" Call");
    }
}

and

public static void main(String[] args) throws InterruptedException, ExecutionException {
    ExecutorService es = Executors.newFixedThreadPool(4); //line n1
    Future f1 = es.submit(new CallerThread("Call"));
    String str = f1.get().toString();
    System.out.println(str);
}

Which statement is true?

A. The program prints Call Call and terminates.
B. The program prints Call Call and does not terminate.
C. A compilation error occurs at line n1.
D. An ExecutionException is thrown at run time.

題解

程式第32行,實體化出CallerThread的物件並透過ExecutorService來執行。

程式第33行,會等待CallerThread物件的call方法執行完畢後,將結果回傳,儲存至str變數中。回傳的物件為「Call Call」字串。

程式第34行,輸出「Call Call」,

由於沒有呼叫ExecutorService物件的shutdown相關方法,因此程式不會停止執行。