This weekend I was working through some especially painful asynchronous Reactive Java/Android API processing. I battled all the standard things when dealing with threads like when to properly synchronize, how to properly callback, and when to interrupt. I weighed the tradeoffs and in the end I built a system that had fewer interrupts. The cost of breaking from the existing program flow and restarting ended up being too much.
Interrupts are a great way to get critical work done immediately. But use them sparingly … the cost to shuffle frames or restart work is very expensive.