2012-04-24 62 views
0

我有一個應用程序在套接字連接上創建一個新線程。我想從這個線程提交一個Callable給一個ExecutorService。 Callable需要通過命令行參數來執行程序,所以我不想通過連接線程來完成。如何從線程提交Callable到ExecutorService

問題是,我不知道如何將Callable提交給具有設置線程數的ExecutorService。

我曾經考慮過用singleton編寫一個提交方法來將我的Callable提交給ExecutorService實例,但對api不熟悉,我不確定這是否合理。

任何幫助,非常感謝, 謝謝。

回答

10

我會嘗試

static final ExecutorService service = Executors.newFixedThreadPool(4); 

Callable call = 
service.submit(call); 
+0

感謝彼得,這符合我的需求。 – kidloco 2012-04-24 15:31:37

2

下面是一些代碼,我在網上找你的問題:

public class CallableExample { 

    public static class WordLengthCallable 
     implements Callable { 
    private String word; 
    public WordLengthCallable(String word) { 
     this.word = word; 
    } 
    public Integer call() { 
     return Integer.valueOf(word.length()); 
    } 
    } 

    public static void main(String args[]) throws Exception { 
    ExecutorService pool = Executors.newFixedThreadPool(3); 
    Set<Future<Integer>> set = new HashSet<Future≶Integer>>(); 
    for (String word: args) { 
     Callable<Integer> callable = new WordLengthCallable(word); 
     Future<Integer> future = pool.submit(callable); 
     set.add(future); 
    } 
    int sum = 0; 
    for (Future<Integer> future : set) { 
     sum += future.get(); 
    } 
    System.out.printf("The sum of lengths is %s%n", sum); 
    System.exit(sum); 
    } 
} 
+2

我會使用期貨清單,以便以可預測的順序收集其結果。 – 2012-04-24 14:56:43

2

還有就是方法提交():

ExecutorService service = Executors.(get the one here you like most)(); 
Callable<Something> callable = (your Callable here); 
Future<AnotherSomething> result = service.submit(callable); 

請注意時相比,使用執行器服務,您無法控制任務實際開始的時間。

+0

爲什麼*另一個*的未來而不是東西的未來? – javadba 2015-08-09 16:52:37

相關問題