"threadName = " + Thread.currentThread().name
+ " threadId = " + Thread.currentThread().id
)
delay(1000L)
}
}
}
日志打印结果:
发现了什么?所谓的协程完全就是开启了一个新的线程来执行任务,有些任务的线程名称和线程id还是完全一致的!这像不像java中的线程池?
看到这里,是不是有点颠覆你原来对协程的认识?难道网上的所有文章都是错误的?
其实网上大部分文章说的协程,指的可能都是其他语言的协程的特点,比如Go、Lua…
而我们要学的,是Kotlin协程,它不是真正意义上的协程,它也没有那么的神秘,本质上还是一套基于原生Java Thread API 的封装。只要你没有魔改JVM,start了几个线程,操作系统就会创建几个线程,Kotlin协程只是做了一个类似线程池的封装,根本谈不上什么性能更好。
总结下来Kotlin协程其实就是为了让我们更方便的来进行多线程开发而已,所以我们就抱着当初学习Handler、AsyncTask这些的心态来学习协程这个工具包就好了,不要想那么多复杂的东西来扰乱自己的思路。