リアルタイムポリシーインタフェースポリシー


フライト条件を伝え、51 BOOKインタフェースのポリシーと8000 YIインタフェースのポリシーをリアルタイムで検索し、結果を返すように要求します.
パフォーマンスの問題のために、両側のインタフェースを並列に調べ、結果を返す必要があります.スレッドを並列にポリシーを調べるにはタイムアウト時間を設定する必要があり、設定時間を超えるとインタフェースのポリシーは取られません.
サンプルコード:


package cn.tempus.prodcloud.service.qr;

import java.util.ArrayList;
import java.util.List;
import java.util.concurrent.Callable;
import java.util.concurrent.ExecutorService;
import java.util.concurrent.Executors;
import java.util.concurrent.Future;
import java.util.concurrent.TimeUnit;

public class App {

	public static ExecutorService pool = Executors.newCachedThreadPool();//     
	
	public static void main(String[] args) {

		//      
		List<Callable<Integer>> tasks = new ArrayList<Callable<Integer>>();
		//  51BOOK  ,          
		Callable<Integer> a51BOOK = new Callable<Integer>() {

			public Integer call() throws Exception {
				System.out.println("---111");
				TimeUnit.SECONDS.sleep(3);
				System.out.println("   ...");
				return 1;
			}
		};
		tasks.add(a51BOOK);

		Callable<Integer> b8000Yi = new Callable<Integer>() {

			public Integer call() throws Exception {
				System.out.println("---9999");
				TimeUnit.SECONDS.sleep(1);
				System.out.println("---9999");
				return 9999;
			}
		};
		tasks.add(b8000Yi);

		try {
			//         ,     2 
			List<Future<Integer>> futures = pool.invokeAll(tasks, 2, TimeUnit.SECONDS);
			for (Future<Integer> fs : futures) {
				Integer res;
				try {
					if (fs == null) {
						System.out.println("null....");
					}
					res = fs.get();
					System.out.println("    :" + res);

				} catch (Exception e) {
					System.out.println(e.getMessage());
				}
			}
		} catch (InterruptedException e) {
		}
		pool.shutdown();

		System.out.println("         ...");
	}

}


結果を返します.

---111
---9999
---9999
null
    :9999
         ...