Java虚拟机(简称JVM)支持多线程。 您在其上运行的任何进程都可以自由创建合理数量的线程以异步执行多个任务。 但是,编写能够以最佳且无错误的方式实现的代码非常困难。 多年来,Java,其他JVM语言以及许多第三方库都试图提出新颖而优雅的方法来解决此问题。
例如,Java 5引入了执行程序框架,该框架使您可以将线程管理详细信息与业务逻辑分离。 Java 8提供了并行流,可以轻松地与lambda表达式一起使用。 RxJava为Java带来了反应性扩展,使您可以编写非常简洁易读的异步代码。
Kotlin支持几乎所有这些方法,并提供一些自己的方法。 在本教程中,我将向您展示如何在Android应用程序中使用它们。
先决条件
要遵循本教程,您需要:
- Android Studio 2.3.3或更高版本
- Kotlin插件 1.1.51或更高版本
- 对Java线程有基本了解
1.创建线程
通常,实现Runnable
接口的类的实例用于在Kotlin中创建线程。 因为Runnable
接口只有一个方法run()
方法,所以您可以利用Kotlin的SAM转换功能以最少的样板代码创建新线程。
这是如何使用thread()
函数(它是Kotlin标准库的一部分)来快速创建和启动新线程的方法:
thread {
// some long running operation
}
仅当您需要偶尔产生一两个线程时,以上方法才适用。 如果并发是应用程序业务逻辑的重要组成部分,并且您需要大量线程,那么将线程池与执行程序服务一起使用是一个更好的主意。
例如,以下代码使用Executors
类的newFixedThreadPool()
方法创建一个包含八个可重用线程的线程池,并在其上运行大量后台操作:
val myService:ExecutorService = Executors.newFixedThreadPool(8)
var i = 0
while (i < items.size) { // items may be a large array
val item = items[i]
myService.submit {
processItem(item) // a long running operation
}