File: ThreadTest.kt

package info (click to toggle)
kotlin 1.3.31%2Bds1-3
  • links: PTS, VCS
  • area: main
  • in suites: forky, sid, trixie
  • size: 109,908 kB
  • sloc: java: 454,756; xml: 18,599; javascript: 10,452; sh: 513; python: 97; makefile: 69; ansic: 4
file content (55 lines) | stat: -rw-r--r-- 1,423 bytes parent folder | download | duplicates (2)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
/*
 * Copyright 2010-2018 JetBrains s.r.o. 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" })
    }
}