Page 263 - 6571
P. 263

public String call() throws Exception {
                          return Thread.currentThread().getName();
                        }
                     });

                     System.out.println(future.get());
                  }

                  Виклик методу get() блокує потік і чекає завершення вико-
            нання задачі, а потім повертає результат її виконання. Але у цьо-
            го коду є важлива відмінність – він ніколи не завершить своє ви-

            конання.  Роботу  потоків  потрібно  завершувати  самостійно.  Для
            цього  в  інтерфейсі  ExecutorService  визначено  два  методи:

            shutdown(), який чекає завершення запущених задач і shut-
            downNow(), який зупиняє потік негайно:

                  ExecutorService service =
                      Executors.newCachedThreadPool();
                  Future<String> future = null;
                  try {
                     for(int i = 0; i < 10; i++) {
                        future = service.submit( /* задача для виконання
            */ );
                        System.out.println(future.get());
                     }
                     service.shutdown();
                  } catch (InterruptedException e) {
                     System.err.println("Tasks interrupted!");
                  } finally {
                     service.shutdownNow();

                  }

                  Виконавці  можуть  приймати  список  задач  на  виконання  за
            допомогою методу invokeAll(), який приймає колекцію задач
            і повертає список об’єктів класу Future.

                  List<Callable<String>> callables = Arrays.asList(
                          () -> {return "Task #1";},
                          () -> {return "Task #2";},

                          () -> {return "Task #3";}
                  );
                  List<Future<String>> futures;
                  futures = service.invokeAll(callables);





                                                        262
   258   259   260   261   262   263   264   265   266