Java线程,流

373 阅读1分钟
object Demo {
    @JvmStatic
    fun main(args: Array<String>) {
        when (ProType.type) {
            ProType.LINK -> {
                val type = 8
                val linkedList = LinkedList<Int>()
                linkedList.add(688)
                linkedList.add(6)
                linkedList.add(8)
                linkedList.add(8)
                linkedList.add(9)
                //查第一个元素用
                val find = linkedList.find {
                    when (type) {
                        8 -> true
                        else -> true
                    }
                }
                println("find:$find")
                //更改
                linkedList[0] = 888
                println("$linkedList")
                //新增
                linkedList.addLast(90)
                println("$linkedList")
                //删除
                linkedList.remove(90)
                println("$linkedList")
            }
            ProType.TREE -> {
                val treeSet = TreeSet<Int>()
                treeSet.add(6)
                treeSet.add(88)
                treeSet.add(66)
                treeSet.add(69)
                treeSet.add(99)
                println("$treeSet")
            }
            ProType.MAP -> {
                val hashMap = hashMapOf<Int, String>()
                hashMap[1] = "老李"
                hashMap[2] = "老何"
                hashMap[3] = "老端"
                println("${hashMap[1]}")
                val iterator = hashMap.keys.iterator()
                while (iterator.hasNext()) {
                    val key = iterator.next()
                    println("iterator${hashMap[key]}")
                }
                val hashSet = hashSetOf<User>()
                val user = User(6, "laoli", 18)
                val user1 = User(8, "li", 20)
                hashSet.add(user)
                hashSet.add(user1)
                println("$hashSet")
                hashSet.remove(user1)
                println("$hashSet")
            }
            ProType.THREAD -> {
                val tw = TicketWindow();
                val t1 = Thread(tw, "一号窗口")
                val t2 = Thread(tw, "二号窗口")
                val t3 = Thread(tw, "三号窗口")
                t1.start()
                t2.start()
                t3.start()
            }
            ProType.STREAM -> {
                val strings = mutableListOf<String>("abc", "", "bc", "efg", "abcd", "", "jkl")
                val filtered = strings.stream()
                    .filter { string: String -> string.isNotEmpty() }
                    .collect(Collectors.toList())
                println("$filtered")
                val random = Random()
                random.ints().limit(2).forEach { println(it) }
                val numbers = listOf(3, 2, 2, 3, 7, 3, 5)
                val squaresList = numbers.stream().map { it * it }.distinct()
                    .sorted().collect(Collectors.toList())
                println("$squaresList")
                val strings1 =
                    listOf("abc", "", "bc", "efg", "abcd", "", "jkl")
                val count = strings1.stream()
                    .filter { it.isEmpty() }
                    .count()
                println("$count")
                val strings2 = listOf("abc", "", "bc", "efg", "", "", "jkl")
                //stream单线程,parallelstream多线程。.collect(Collectors.toList())是线程安全的
                val count2 = strings2.parallelStream()
                    .filter {
                        println("filter${Thread.currentThread().name}")
                        it.isEmpty()
                    }
                    .count()
                println("$count2")
            }
        }
    }
}
class TicketWindow : Runnable {
    private var tickets = 1000

    override fun run() {
        while (true) {
            synchronized(TicketWindow::class.java) {
                if (tickets > 0) {
                    println("${Thread.currentThread().name}还剩余票:" + tickets + "张")
                    tickets--
                    println(Thread.currentThread().name + "卖出一张火车票,还剩" + tickets + "张")
                    Thread.sleep(1)
                } else {
                    println("${Thread.currentThread().name}余票不足,暂停出售!")
                    //                wait,notify和notifyAll只能在同步控制方法或者同步控制块里面使用,而sleep可以在任何地方使用
                    Thread.sleep(1000 * 60 * 5.toLong())
                }
            }
        }
    }
}