ScheduledThreadPoolExecutor, jak wykryć zakończenie zadania ?

0

Cześć
Czy w prawidło sposób zrobiłem wykrycie zbioru zakończenia wszystkich zadań, nie chciałbym ubijać wątków.

            ///
                create_arrays_pixel_from_image();

                CopyOnWriteArrayList<Future<?>> list_tasks = new CopyOnWriteArrayList<>();

                ScheduledThreadPoolExecutor scheduledThreadPoolExecutor = new ScheduledThreadPoolExecutor(5);
                for(int i = 0; i < list_search_fish.size(); i++) {
                    int index = i;

                    list_tasks.add(scheduledThreadPoolExecutor.submit(new Runnable() {
                        @Override
                        public void run() {
                            check_inventory(index);
                        }
                    }));

                }

                while(true) {
                    for(Future<?> f : list_tasks) {
                        boolean is_zakonczyc = true;
                        if(!f.isDone()) {
                            is_zakonczyc = false;
                        }
                        if(is_zakonczyc) {
                            for(int i = 0; i < list_points.size(); i++) {
                                Point temp = list_points.get(i);

                                robot.mouseMove(temp.x, temp.y);
                                robot.mousePress(InputEvent.BUTTON3_DOWN_MASK);
                                try {
                                    Thread.sleep(20);
                                } catch (InterruptedException exception) {
                                    exception.printStackTrace();
                                }
                                robot.mouseRelease(InputEvent.BUTTON3_DOWN_MASK);

                                try {
                                    Thread.sleep(1000);
                                } catch (InterruptedException exception) {
                                    exception.printStackTrace();
                                }
                            }

                            return;
                        }
                    }
                }
3

o_O a nie prościej zawołać shutdown() na tym executorze a następnie awaitTermination() żeby zablokować się aż wszystkie operacje się wykonają?

0

Pytanie co autor miał na myśli?

  1. Chcesz wykonać jakaś operacje rownolegle i zaczekać na wykonanie całości?
  2. Chcesz monitorować, ile zadań czeka w kolejce i jest wykonywanych?
  3. Odpalać jakiś kod na zakończenie zadania?

1 użytkowników online, w tym zalogowanych: 0, gości: 1