package drills.drill06.exercise4.actuator import java.util.concurrent.CountDownLatch import java.util.concurrent.TimeUnit class Actuator(private val action: Action) : Thread() { var latch = CountDownLatch(1) override fun run() { while (true) { latch.await() synchronized(this) { latch = CountDownLatch(1) } if (action.getState() == Action.State.OFF) action.on() latch.await(2050, TimeUnit.MILLISECONDS) synchronized(this) { if (latch.count == 1L) action.off() } } } @Synchronized fun actuate() { latch.countDown() } }