Как избежать повторного рендеринга компонента после изменения состояния редукса?

Использование Thread.interrupt() - вполне приемлемый способ сделать это. На самом деле, вероятно, предпочтительнее флаг, как было предложено выше. Причина в том, что если вы находитесь в прерывистом блокирующем вызове (например, Thread.sleep или с использованием операций с каналом java.nio), вы сможете сразу же вырваться из них.

Если вы используйте флаг, вам нужно дождаться завершения операции блокировки, а затем вы можете проверить свой флаг. В некоторых случаях вы должны делать это в любом случае, например, используя стандартные InputStream / OutputStream, которые не прерываются.

В этом случае, когда поток прерывается, он не прерывает IO, однако вы можете легко сделать это в своем коде (и вы должны сделать это в стратегических точках, где вы можете безопасно остановить и очистить)

if (Thread.currentThread().isInterrupted()) {
  // cleanup and stop execution
  // for example a break in a loop
}

Как я уже сказал, основным преимуществом Thread.interrupt() является что вы можете немедленно вырваться из прерывистых вызовов, которые вы не можете сделать с флагом.

1
задан Farid 15 January 2019 в 23:21
поделиться