Page 262 - 6571
P. 262
ExecutorService service =
Executors.newCachedThreadPool();
Припустимо, необхідно запустити деякий код асинхронно 10
раз. Для цього за допомогою фабрики класу Executors створи-
мо пул потоків і помістимо код, що має виконатися у кожному із
потоків у метод run():
ExecutorService service =
Executors.newCachedThreadPool();
for(int i = 0; i < 10; i++) {
service.submit(new Runnable() {
public void run() {
System.out.println(Thread.currentThread().
getName());
}
});
}
Окрім Runnable, виконавці можуть приймати інший вид за-
дач, який називається Callable. Callable – це також функці-
ональний інтерфейс, але на відміну від Runnable, його метод
call() може повертати значення.
ExecutorService service =
Executors.newCachedThreadPool();
for(int i = 0; i < 10; i++) {
service.submit(new Callable<String>() {
public String call() throws Exception {
return Thread.currentThread().getName();
}
});
}
Оскільки метод submit() не чекає завершення задачі, ви-
конавець не може повернути результат виконання задачі безпосе-
редньо. Замість цього виконавець повертає спеціальний об’єкт
типу Future, який інкапсулює в собі результат виконання зада-
чі:
ExecutorService service =
Executors.newCachedThreadPool();
Future<String> future = null;
for(int i = 0; i < 10; i++) {
future = service.submit(new Callable<String>() {
261