39 lines
853 B
Kotlin
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()
|
|
}
|
|
}
|
|
}
|