SecretX
02/26/2021, 6:56 AM(DefaultDispatcher-worker-5 @coroutine#5) Subscribing 10000 listeners took 177ms
(DefaultDispatcher-worker-4 @coroutine#4) Subscribing 10000 listeners took 178ms
(DefaultDispatcher-worker-1 @coroutine#3) Subscribing 10000 listeners took 178ms
(DefaultDispatcher-worker-3 @coroutine#2) Subscribing 10000 listeners took 178ms
(DefaultDispatcher-worker-6 @coroutine#6) Subscribing 10000 listeners took 178ms
(main @coroutine#1) Unsubscribing all 49962 listeners took 0ms
uli
02/26/2021, 7:09 AMuli
02/26/2021, 7:35 AMcontains
is a kotlin extension on maps which inlines to containsKey
uli
02/26/2021, 7:37 AMConcurrentHashMap
which calls …. contanisValue
uli
02/26/2021, 7:37 AMuli
02/26/2021, 7:38 AMcontainsKey
instead of contains
uli
02/26/2021, 7:41 AMwhile(observers.contains(uuid)) {
Thread.sleep(1)
uuid = UUID.randomUUID()
}
uli
02/26/2021, 7:45 AMputIfAbsent
uli
02/26/2021, 7:52 AMfun addListener(observer: Observer<T>): Subscription<T> {
var uuid = UUID.randomUUID()
while (observers.putIfAbsent(uuid, observer) != null) {
Thread.sleep(1)
uuid = UUID.randomUUID()
}
val subscription = Subscription(uuid, this)
return subscription
}
SecretX
02/27/2021, 7:25 PMuli
03/01/2021, 8:50 AMThread.sleep(1)
? Or was that to avoid races?