lm-sistemi-software-distrib.../src/main/kotlin/util/future/LatchFuture.kt

39 lines
853 B
Kotlin

package util.future
import java.util.concurrent.CountDownLatch
import java.util.concurrent.Future
import java.util.concurrent.TimeUnit
class LatchFuture<T>(private val func: () -> T) : Future<T> {
private val latch = CountDownLatch(1)
private var isCancelled = false
private var value: T? = null
override fun isDone(): Boolean = value != null
override fun get(): T {
latch.await()
return value!!
}
override fun get(p0: Long, p1: TimeUnit): T? {
p1.sleep(p0)
return value
}
override fun cancel(p0: Boolean): Boolean {
isCancelled = true
latch.countDown()
return isCancelled
}
override fun isCancelled(): Boolean = isCancelled
fun exec() {
if (!isCancelled) {
value = func()
latch.countDown()
}
}
}