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
   257   258   259   260   261   262   263   264   265   266