| /* | |
| * 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<String> { // 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<String>() | |
| 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<String>() { | |
| override fun initialValue() = "default" | |
| } | |
| assertEquals("default", w.getOrSet { "v1" }) | |
| } | |
| } |