I would be tempted to use timers here rather than the delays.
The java.util.Timer and java.util.TimerTask classes.
Usage examples here : https://www.iitk.ac.in/esc101/05Aug/tutorial/essential/threads/timer.html
A system that I have running involves a large number of (not arduino) but AVR MCUs on a network, comms speed and reliability is important, I was finding the serialEvent() unreliable at speed.
So I use a “system tick” generated from timer.scheduleAtFixedRate(new task(), delay, period)
with an initial delay for comms to “start up and settle”, this then polls the serial port for new data (in the format expected).
Part possibly most relevant to your setup:
When data is sent out onto the network a “TimeOut” timer is started running using .util.TimerTask. If we don’t hear back within the expected period the timer task sets a timeout flag. Which can then be used to do whatever you need.
Hope that helps a bit…