Зациклить Java-приложение в тиках

1

Я делаю приложение сервера Java. Приложение будет использовать много ресурсов, если оно будет работать, когда это возможно.

Насколько я знаю, добавил ли я метод сна, он будет работать следующим образом:

Do task (Might take 10ms to do. Can also take longer or less)
Sleep 50ms
Do task (Might take 10ms to do. Can also take longer or less)
Sleep 50ms

Итак, как я могу заставить его работать каждые 50 мс (20 тиков)?

благодаря

  • 0
    Можете ли вы уточнить, что вы на самом деле хотите, и чем оно отличается от вашего метода sleep ?
  • 0
    Попробуй. @SotiriosDelimanolis
Показать ещё 3 комментария
Теги:
ticker

2 ответа

0

Вы можете использовать ScheduledExecutorService

ScheduledExecutorService service = Executors.newScheduledThreadPool(10);
service.scheduleAtFixedRate(() -> {
    System.out.println("whatever");
}, 0, 50, TimeUnit.MILLISECONDS);
   // ^ rate

Метод scheduledAtFixedRate() будет планировать задание для выполнения с фиксированной скоростью независимо от времени выполнения задачи. Возможно, одно исполнение займет дольше 50 мс, а следующее будет работать (при условии, что у вас достаточно потоков).

  • 0
    Я хочу, чтобы он работал 20 раз в секунду. Если сервер перегружен, он будет пытаться запускаться 20 раз в секунду.
  • 0
    @ user3854743 Да, будет.
0

Не зная, что делает ваше приложение (вы могли бы включить его в свой вопрос), вы можете использовать планировщик (Quartz, java.util.Timer). Какую задачу вы пытаетесь выполнить каждые 50 мс?

Редактировать:

В то время как "игровой цикл" хорош и хорош в играх, серверы редко имеют их. Прием данных является непрерывным действием, и состояние должно соответствующим образом изменяться. Это большая проблема дизайна на сервере. При правильном дизайне вам не нужно создавать искусственные паузы.

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

  • 2
    Это ответ или комментарий ???
  • 0
    Это платформа игрового сервера. Так что в основном каждый тик. Получать данные, отправлять данные, вычислять местоположения и так далее.
Показать ещё 2 комментария

Ещё вопросы

Сообщество Overcoder
Наверх
Меню