併發編程之Future模式

Future模式的主要使用場景:當前線程須要依賴另外一線程的返回數據而且處理數據的線程又至關耗時,那麼Future模式就可使主線程提交數據請求給另外一線程後繼續處理業務邏輯,等須要時將數據從另外一線程返回,很好的利用了等待時間。java

舉一個能說明問題又簡單的例子,本例使用JDK庫的Future相關類實現:ide

package concurrent;

import java.util.concurrent.Callable;

public class DataProcessThread implements Callable<String> {

	@Override
	public String call() throws Exception {
		// TODO Auto-generated method stub
		Thread.sleep(10000);//模擬數據處理
		return "數據返回";
	}

}

package concurrent;

import java.util.concurrent.ExecutionException;
import java.util.concurrent.ExecutorService;
import java.util.concurrent.Executors;
import java.util.concurrent.FutureTask;

public class MainThread {

	public static void main(String[] args) throws InterruptedException,
			ExecutionException {
		// TODO Auto-generated method stub
		DataProcessThread dataProcessThread = new DataProcessThread();
		FutureTask<String> future = new FutureTask<String>(dataProcessThread);

		ExecutorService executor = Executors.newFixedThreadPool(1);
		executor.submit(future);

		Thread.sleep(10000);//模擬繼續處理自身其餘業務
		while (true) {
			if (future.isDone()) {
				System.out.println(future.get());
				break;
			}
		}
		executor.shutdown();
	}

}
相關文章
相關標籤/搜索