2012-04-24 3 views
0

У меня есть приложение, которое создает новый поток в соединении сокета. Я хотел бы отправить Callable из этой темы в ExecutorService. Callable должен выполнить программу с помощью аргумента командной строки, поэтому я не хочу делать это через поток соединения.Как отправить вызываемый в ExecutorService из потока

Проблема в том, что я не знаю, как отправить Callable в ExecutorService с установленным количеством потоков.

Я рассмотрел возможность сделать это с помощью синглтона и написать метод отправки для отправки моего Callable в экземпляр ExecutorService, но, не знакомый с api, я не был уверен, насколько это разумно.

Любая помощь с благодарностью, Спасибо.

ответ

10

Я хотел бы попробовать

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

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

Спасибо, Питер, это отвечает моим потребностям. – kidloco

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

Я бы использовал список фьючерсов, чтобы их результаты были собраны в предсказуемом порядке. –

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