Показаны сообщения с ярлыком потоки. Показать все сообщения
Показаны сообщения с ярлыком потоки. Показать все сообщения

понедельник, 23 мая 2011 г.

Многопоточность в java. Пример

Удобство
Да, многопоточность в яве действительно сделана хорошо. Инструменты удобны и если хочется получить какой-то высокоуровневый инструмент для многопоточной программы, то он существует (а если нет, то один из существующих наверняка лучше того, который хотелось увидеть).
Простой пример:
private static String[] sites = 
    {"www.google.com", "www.ya.ru", "www.yahoo.com"};
//создание пула потоков    
ExecutorService service = Executors.newCachedThreadPool();
List<Future<String>> futures = 
    new ArrayList<Future<String>>();
for (int i = 0; i < sites.length; ++i) {
    //запуск нового потока с параметром из массива
    Future<String> future = 
        service.submit(new ThreadWorker(sites[i]));
    futures.add(future);
    }
//на этом этапе все потоки запущены
System.out.println("threads started");
for (Future<String> future : futures) {
    //забираем результат выполнения потока
    //если поток ещё не завершился, то происходит ожидание
    System.out.println("get result from Future: " + future.get());
}
//сообщаем пулу о том, что закончили пользоваться потоками
service.shutdown();
Подробнее?