執行緒池-Callable介面(2)
阿新 • • 發佈:2021-01-31
技術標籤:多執行緒之執行緒同步【執行緒池】--- 複習筆記thread介面java多執行緒future
Callable介面
Callable介面與Runnable介面的區別:
- Callable介面中call方法有返回值,Runnable介面中run方法沒有返回值
- Callable介面中call方法有宣告異常,Runnable介面中run方法沒有宣告異常
單詞 | 單詞 |
---|---|
Callable | FutureTask(執行任務)與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();
}
}