package com.niewj.thread; import java.util.HashSet; import java.util.List; import java.util.Set; import java.util.concurrent.*; public class ThreadTest { /** * 同一個map裏面存儲了各個水果的數量, * * @param args */ public static void main(String[] args) throws ExecutionException, InterruptedException { /** * invokeAny 3個線程中最快的那個會返回,可是其餘的也可能都執行完/也可能不執行; */ testInvokeAny(); } private static void testInvokeAny() throws ExecutionException, InterruptedException { ExecutorService executorService = Executors.newSingleThreadExecutor(); Set<Callable<String>> tskSet = new HashSet<>(); tskSet.add(new Callable<String>() { public String call() throws Exception { System.out.println("Task 1 ..........running......."); return "Task 1"; } }); tskSet.add(new Callable<String>() { public String call() throws Exception { System.out.println("Task 2 ..........running......."); return "Task 2"; } }); tskSet.add(new Callable<String>() { public String call() throws Exception { System.out.println("Task 3 ..........running......."); return "Task 3"; } }); String result = executorService.invokeAny(tskSet); System.out.println("result = " + result); executorService.shutdown(); } }
invokeAny 3個線程中最快的那個會返回,java
但: 其餘的2個也可能都執行完/也可能不執行;線程
---[2018-08-23]---code