title: ScheduledExecutorService task that blocks for longer than its run interval
body: <p>Question about <code>ScheduledExecutorService.shceduleAtFixedRate</code> - I schedule <code>taskA</code> to run every 500 millis, which blocks for 1000 millis. Now subsequent executions aren't gonna wait the extra 500 millis, but rather commence immediately after the previous one. </p>
  
  <p><code>taskA</code> acquires an intrinsic lock, which is also (attempted) acquired by a different thread. Since intrinsic locks have no fairness guarantees this thread is running a risk of starvation, so here's my question: Is there a good/clean way to avoid this risk? E.g. schedule the task to run every 1500 millis (doesn't sound very waterproof)? Or do we expect the lock acquisition to exhibit a kind of "amortized fairness"?</p>