1. 程式人生 > >Java執行緒--執行緒池Future、Callable

Java執行緒--執行緒池Future、Callable

Future、Callable配套使用

Runnable與Callable區別:

  • Runnable介面:

一個獨立的任務,任務執行的結果,無需告知主執行緒

Runnable介面中的方法為:void run(){}

  • Callable介面:

也是一個獨立的任務,但是任務執行的結果,是主執行緒想要知曉的,因此可以配套Future介面,在將來的某個時間點,主執行緒可以獲取到獨立任務的執行結果,以便主執行緒拿來消費使用這個任務的執行成果

Callable介面中的方法為:T call(){}

示例程式碼:

/**
* 演示Future、Callable用法
*/

import java.util.concurrent.*;
import java.util.concurrent.locks.*;
import java.util.concurrent.atomic.*;

public class FutureTest{
    
    public static void main(String[] args){

		ExecutorService es = Executors.newFixedThreadPool(2);

		Future<Integer> f1 = es.submit(new MyTask());

		try{
			System.out.println("主執行緒痴痴的等子執行緒的運算結果!");
			Integer sum = f1.get();
			System.out.println("sum is :"+sum);
		}catch(Exception ee){}

		es.shutdown();

		System.out.println("main is over....");
    }
}

class MyTask implements Callable<Integer>
{
	public Integer call(){

		int sum = 0;
		for(int i=0;i<5000;i++){
			sum+=i;
		}

		try{
			Thread.sleep(2000);
			System.out.println("子執行緒運算完畢!");
		}catch(Exception ee){}

		return sum;
	}
}

程式執行結果如下:

主執行緒痴痴的等子執行緒的運算結果!
子執行緒運算完畢!
sum is :12497500
main is over....