/* * Copyright 2010-2018 JetBrains s.r.o. and Kotlin Programming Language contributors. * Use of this source code is governed by the Apache 2.0 license that can be found in the license/LICENSE.txt file. */ package test.concurrent import kotlin.concurrent.* import kotlin.test.* import java.util.concurrent.* import java.util.concurrent.TimeUnit.* class ThreadTest { @Test fun scheduledTask() { val pool = Executors.newFixedThreadPool(1) val countDown = CountDownLatch(1) pool.execute { countDown.countDown() } assertTrue(countDown.await(2, SECONDS), "Count down is executed") } @Test fun callableInvoke() { val pool = Executors.newFixedThreadPool(1) val future = pool.submit { // type specification required here to choose overload for callable, see KT-7882 "Hello" } assertEquals("Hello", future.get(2, SECONDS)) } @Test fun threadLocalGetOrSet() { val v = ThreadLocal() assertEquals("v1", v.getOrSet { "v1" }) assertEquals("v1", v.get()) assertEquals("v1", v.getOrSet { "v2" }) v.set(null) assertEquals("v2", v.getOrSet { "v2" }) v.set("v3") assertEquals("v3", v.getOrSet { "v2" }) val w = object : ThreadLocal() { override fun initialValue() = "default" } assertEquals("default", w.getOrSet { "v1" }) } }