1. 程式人生 > 其它 >執行緒池-Callable介面(2)

執行緒池-Callable介面(2)

技術標籤:多執行緒之執行緒同步【執行緒池】--- 複習筆記thread介面java多執行緒future

Callable介面

Callable介面與Runnable介面的區別:

  1. Callable介面中call方法有返回值,Runnable介面中run方法沒有返回值
  2. Callable介面中call方法有宣告異常,Runnable介面中run方法沒有宣告異常
單詞單詞
CallableFutureTask(執行任務)與Callable配合
package dey01;
import java.util.concurrent.Callable;
import java.util.concurrent.
ExecutionException; import java.util.concurrent.FutureTask; //例子:實現1-100和 public class Callable_01 { public static void main(String[] args) throws ExecutionException, InterruptedException { //1.建立一個Callable物件 Callable<Integer> callable = new Callable<Integer>() { @Override
public Integer call() throws Exception { System.out.println(Thread.currentThread().getName()+"-----開始-----"); int sum = 0; for (int i = 1; i <= 100; i++) { sum += i; } return sum;
} }; //2.把Callable物件 轉成可執行任務 FutureTask<Integer> task = new FutureTask<Integer>(callable); //3.建立執行緒 Thread thread = new Thread(task); //4.啟動執行緒 thread.start(); //5.獲取結果 Integer sum = task.get(); System.out.println(sum); } }

Callable與執行緒池配合 程式碼

package dey01;
import java.util.concurrent.*;
//Future 表示將要執行完任務的結果
//例子:實現1-100和
public class Callable_01 {
    public static void main(String[] args) throws Exception{
        //1.建立一個執行緒池和Callable物件
        ExecutorService es = Executors.newSingleThreadExecutor();
        //2.提交任務
        Future<Integer> future = es.submit(new Callable<Integer>() {
            @Override
            public Integer call() throws Exception {
                System.out.println(Thread.currentThread().getName()+"-----開始-----");
                int sum = 0;
                for (int i = 1; i <= 100; i++) {
                    sum += i;
                }
                return sum;
            }
        });
        //3.獲取任務結果
        System.out.println(future.get());
        //4.關閉執行緒
        es.shutdown();
    }
}