Java-поток [...], который должен работать в фоновом режиме, пока пользователь находится на сайте
Если разветвленный поток должен сохранить состояние при входе клиента в систему, я бы использовал базу данных, кэш-память или какой-либо другой уровень персистентности для хранения состояния сеанса клиента. Это гораздо более типичная модель. Вы также можете иметь несколько внешних интерфейсов, которые совместно используют информацию о сеансе в сети.
Если вы не разговариваете с браузером, то создание автономного веб-приложения может быть лучшим выбором. Вы по-прежнему можете использовать HTTP в качестве протокола передачи, и в этом случае я бы рекомендовал использовать веб-реализацию Java, например Jetty . Это потребует значительно меньше технологий и сложности.
Если вам нужно реализовать веб-страницы, я бы, конечно, использовал правильные модели и технологии внешнего интерфейса. Вы должны разделить свои страницы на несколько апплетов - или несколько контроллеров / представлений в модели MVC. Использование апплетов должно быть в порядке. Они (или контроллеры) должны вызывать централизованную службу, которая запускает, связывается и останавливает фоновые потоки в зависимости от потока информации.
Я бы, конечно, также запустил другой фоновый поток для тайм-аута ваших клиентских потоков на случай, если клиент никогда не вернется. Ваши рабочие потоки могут просто завершиться после определенного периода ожидания.
Надеюсь, это поможет.
Возможно ли, чтобы Java-поток, созданный Java-апплетом, продолжал выполнение после перехода пользователя на другую веб-страницу (на том же веб-сайте)? Я предполагаю, что да.
Да. Разветвленные потоки будут продолжать работать до тех пор, пока они не завершатся или (если это демон) процесс не завершится.
Возможно ли, чтобы недавно запущенный Java-апплет связывался с Java-потоком, уже запущенным в фоновом режиме?
Конечно. Им нужен какой-то механизм для обмена данными. Например, ваша фоновая служба потоков может хранить Map
объектов потоков, ключ - это своего рода идентификатор клиента. Всякий раз, когда поток хочет поговорить с фоновым потоком, он может вызвать службу для поиска потока по идентификатору. Что-то вроде:
BackgroundStream thread = threadService.getThread(clientId);
thread.callMethod(...);
Если бы был какой-то синхронный вопрос / ответ, вам понадобится переменная условия или что-то в этом роде. Читайте о потоках Java для получения дополнительной информации.