Что касается Java, то, что вы описываете, выглядит как SwingWorker (рабочий поток) .
Когда программе Swing требуется выполнить долгосрочную задачу, она обычно использует один из рабочих потоков, также известный как фоновые потоки.
Программа Swing включает в себя следующие виды потоков:
- Начальные потоки, потоки, которые выполняют начальный код приложения.
- Поток отправки событий, где выполняется весь код обработки событий. Большая часть кода, взаимодействующего с платформой Swing, также должна выполняться в этом потоке.
- Рабочие потоки, также известные как фоновые потоки, где выполняются трудоемкие фоновые задачи.
Правило однопоточности :
После реализации компонента Swing весь код, который может влиять или зависеть от состояния этого компонента, должен выполняться в потоке диспетчеризации событий.
При использовании в контексте J2EE вам нужно быть осторожным, когда вы ссылаетесь на SwingWorker из EJB .
Относительно J2ME , это зависит от того, разрабатываете ли вы приложение как стандартный мидлет, который будет работать на любом устройстве с поддержкой MIDP, или , например, как RIMlet, приложение на основе CLDC, которое использует API-интерфейсы, специфичные для BlackBerry, и поэтому будет работать только на устройствах BlackBerry.
Поскольку в отличие от классов пользовательского интерфейса MIDP, RIM аналогичны Swing в том смысле, что операции пользовательского интерфейса выполняются в потоке событий, который не является потокобезопасным, как в MIDP. Чтобы запустить код в потоке событий, приложение должно получить блокировку для объекта события или использовать invokeLater () или invokeAndWait () - дополнительная работа для разработчика, но сложность идет с ценой.
Но для LCDUI вы можете получить доступ к форме из нескольких потоков .