У нас есть клиентское приложение RMI, написанное на Java, которое должно периодически отправлять сообщения «оставайся в живых» в серверное приложение. Мы реализовали это в виде отдельного потока пульса, который отправляет сообщение о том, что осталось в живых, на сервер, а затем спит в течение 15 секунд, используя Thread.sleep ().
Тема имеет высокий приоритет:
Thread heartbeatThread = new Thread(new HeartbeatRunnable(server));
heartbeatThread.setPriority(Thread.MAX_PRIORITY);
heartbeatThread.start();
Однако, когда ящик, на котором работает клиент, использует много ЦП, мы обнаруживаем, что пропуски пульса пропускаются, что заставляет сервер считать, что наше клиентское приложение умерло.
Мы добавили вызовы Thread.yield () в мой основной поток, хотя это не помогло устранить проблему.
Есть ли способ гарантировать, что сердцебиение будет отправлено вовремя, пока мое приложение еще работает?