``` fun main(args: Array<String>) { val ...
# rx
k
Copy code
fun main(args: Array<String>) {
    val mutex = Semaphore(0)

    val random = Random()

    val observable = Observable.interval(1000, TimeUnit.MILLISECONDS)
            .map { random.nextInt(10) }
            .doOnEach { println("Emitted: $it") }

    val shared = observable.share()

    val threshold = 6

    val alerts = shared.switchMap {
        when {
            it < threshold -> Observable.timer(3000, TimeUnit.MILLISECONDS).map { Alert() }
            else -> Observable.never()
        }
    }

    alerts.subscribe({ println(it) }, { it.printStackTrace() }, { mutex.release() })

    mutex.acquire()
}