Использование ExecutorService и Future для заполнения HashMap - PullRequest
0 голосов
/ 11 апреля 2020

Так что я делал много «однопоточных» приложений с Android и заметил, что вам действительно не нравится, что вы делаете это.

Поэтому я пытаюсь использовать ExecutorService и Future в моих интересах, но, несмотря на поиск ресурсов в сети, я изо всех сил пытаюсь правильно понять, как они работают.

Что мне нужно сделать, так это то, что мой поток пользовательского интерфейса запускает новый поток (мой rootInitThread). В этом потоке мне нужен мой ProjectManager для запуска другого потока, который снова запустит, скажем, 5 потоков, которые будут использоваться для заполнения в конечном итоге переменной HashMap (в данном случае, скажем, для этого нужно всего 5 записей).

Хотя это происходит в потоке инициализации ProjectManager, я бы хотел, чтобы rootInitThread продолжал выполнять другие действия, ожидая, пока ProjectManager завершит работу sh, и по завершении возьмет полученный HashMap и передаст его потоку пользовательского интерфейса, чтобы он мог получать информацию с карты.

Как только я пойму, как это сделать, я смогу на своем пути go и продолжить разработку того, что мне нужно, с помощью многопоточности.

Например, на данный момент мой Приложение выполняет следующие действия:

В MainActivity:

public void onCreate(Bundle saveInstanceBundle) {
    ThreadPoolExecutor initExec = (ThreadPoolExecutor) Executors.newFixedThreaPool(5);
    initExec.submit(() -> {
        ProjectManager.getInstance().init();
    });

Это выше работает, как я ожидал, и создает второй поток (мой поток инициализации)

Я просто не не знать, что нужно сделать в потоке инициализации ProjectManager, чтобы создать и заполнить HashMap и получить rootInitThread для продолжения и затем вернитесь, чтобы получить полученный HashMap ... Надеюсь, это имеет смысл?

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...