ExecutorService的invokeAny方法

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

相關文章
相關標籤/搜索