从Java线程到kotlin协程之多线程的基本概念

Posted XeonYu

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了从Java线程到kotlin协程之多线程的基本概念相关的知识,希望对你有一定的参考价值。

android开发中,我们必不可少的会遇到多线程开发。因为Android中的主线程负责更新UI,我们不能在主线程处理耗时逻辑,否则就会造成卡顿甚至出现ANR(程序未响应)等异常情况。所以,我们需要把网络请求等耗时操作放到子线程中去做,完成之后再切到主线程去更新UI,这样一来,我们就不得不通过多线程开发来达到目的了。其中,切线程的代码在Android开发中就变成非常常见了。

而随着Android开发技术的更新迭代,之前有非常方便的Rx系列帮助我们快速的实现线程切换,到如今的kotlin协程,切线程的代码是变得越来越简洁了。

本系列文章打算从Java的线程到kotlin的协程的知识点给梳理一遍,尽可能的搞清楚多线程开发这一块的知识点,把基础给夯实一点。

废话不多说,开始吧。

 

进程和线程

关系

进程:正在运行的独立的应用程序。例如QQ,微信,支付宝等程序,在运行时就是一个进程

线程:组成进程的基本单位,用来完成特定的功能,一个进程中包含一个或多个线程

 

区别

进程在运行的时候有自己独立的内存空间,每个进程的内存空间互不影响

线程共享内存空间的,但是线程的执行是相互独立。线程是依附于进程存在的,由进程来控制执行。

 

多线程(并发执行)

在同一个进程中,启动了多个线程同时(并发)去执行任务,就是多线程。

学过计算机操作系统这门课的应该都知道,进程可被调度在一个处理器上交替执行,或在多个处理器上并行执行,不同类型的操作系统可能采用不同调度策略,交替和并行执行都是并发的类型。为了提高并发粒度和降低并发开销,现代操作系统又引进线程概念,此时进程仍然作为资源分配和管理单位,线程则成为处理器调度的基本单位

也就是说,在单核单线程的cpu上,多线程的同时执行只是个假象,并非真正的同时执行,而是多个线程轮流占用cpu资源交替执行,由于cpu的计算速度非常快,在我们看来,就像是在同时执行一样。

使用多线程开发主要是为了提高我们程序的性能,提升对cpu的利用率

 

示例代码

知道上面的概念之后,我们先来看个简单的示例代码:

fun main() {
    /*新建一个线程 循环输出*/
    Thread {
        for (i in 1..10) {
            Thread.sleep(10)
            println("${Thread.currentThread().name} i = ${i}")
        }
    }.start()
    /*在原本的主线程输出*/
    for (i in 1..10) {
        Thread.sleep(10)
        println("${Thread.currentThread().name} i = ${i}")
    }
}

 

我们在主线程上循环打印,并且新建了个线程循环打印,来看下运行结果

 

从打印结果可以看出,两个线程确实是在交替执行的。

好了,通过本篇文章先把概念理解清楚即可。

 



如果你觉得本文对你有帮助,麻烦动动手指顶一下,可以帮助到更多的开发者,如果文中有什么错误的地方,还望指正,转载请注明转自喻志强的博客,谢谢!

 

 

 

 

 

以上是关于从Java线程到kotlin协程之多线程的基本概念的主要内容,如果未能解决你的问题,请参考以下文章

从Java线程到kotlin协程之线程的状态

从Java线程到kotlin协程之线程合并 (join)

从Java线程到kotlin协程之线程休眠 (sleep)

从Java线程到kotlin协程之线程同步(wait)

从Java线程到kotlin协程之线程同步(synchronized关键字)

进程线程协程之概念理解