New, better implementation of volatiles: using auto-renewing setTimeout instead of setInterval