美文网首页
关于多线程

关于多线程

作者: InLoneliness | 来源:发表于2020-04-25 14:56 被阅读0次

    关于多线程的理解

    进程与线程

    • 进程 :是一个正在执行中的程序,每一个进程执行都有一个执行顺序,该顺序是一个执行路径,或者叫一个控制单元;
    • 线程:就是进程中的一个独立控制单元,线程在控制着进程的执行。一个进程中至少有一个进程。
    • 多线程:一个进程中不只有一个线程。

    线程的属性、状态、生命周期

    多线程的就绪、运行和死亡状态

    • 就绪状态转换为运行状态:当此线程得到处理器资源;
    • 运行状态转换为就绪状态:当此线程主动调用yield()方法或在运行过程中失去处理器资源。
    • 运行状态转换为死亡状态:当此线程线程执行体执行完毕或发生了异常。

    Java线程具有五中基本状态

    • 新建状态(New):当线程对象对创建后,即进入了新建状态,如:Thread t = new MyThread();
    • 就绪状态(Runnable):当调用线程对象的start()方法(t.start();),线程即进入就绪状态。处于就绪状态的线程,只是说明此线程已经做好了准备,随时等待CPU调度执行,并不是说执行了t.start()此线程立即就会执行;
    • 运行状态(Running):当CPU开始调度处于就绪状态的线程时,此时线程才得以真正执行,即进入到运行状态。注:就 绪状态是进入到运行状态的唯一入口,也就是说,线程要想进入运行状态执行,首先必须处于就绪状态中;
    • 阻塞状态(Blocked):处于运行状态中的线程由于某种原因,暂时放弃对CPU的使用权,停止执行,此时进入阻塞状态,直到其进入到就绪状态,才 有机会再次被CPU调用以进入到运行状态。
    • 死亡状态(Dead):线程执行完了或者因异常退出了run()方法,该线程结束生命周期。

    多线程的优点

    • 多线程从某方面可以等价于多任务,当你有多个任务要处理时,多个任务一起做所消耗的时间肯定比任务串行起来做,所消耗的时间短;
    • 在我们现在的系统中,CPU的运行速度是很快的,其中很大的时间消耗是在等硬盘、IO输入、网络等资源;当多任务时,CPU完全可以在多个任务之间来回切换。使用的花费的时间远远少于所有任务需要消耗的少;
    • 进程之间不能共享数据,线程可以;
    • 系统创建进程需要为该进程重新分配系统资源,创建线程代价比较小。

    多线程带来的问题

    1. 线程的生命周期开销非常高
    2. 消耗过多的CPU资源
    3. 降低稳定性

    创建线程的方法

    1. 继承Thread类:
    • 定义类继承Thread;
    • 复写Thread类中的run方法;
    • 调用线程的start方法:
    1. 实现Runnable接口
    2. 通过Callable和Future创建线程

    线程池的优点

    1. 降低系统资源消耗,通过重用已存在的线程,降低线程创建和销毁造成的消耗;
    2. 提高系统响应速度,当有任务到达时,通过复用已存在的线程,无需等待新线程的创建便能立即执行;
    3. 方便线程并发数的管控;
    4. 提供更强大的功能,延时定时线程池。

    关于ThreadLocal

    • threadlocal而是一个线程内部的存储类,可以在指定线程内存储数据,数据存储以后,只有指定线程可以得到存储数据
    • threadLocal提供了线程内存储变量的能力,这些变量不同之处在于每一个线程读取的变量是对应的互相独立的。通过get和set方法就可以得到当前线程对应的值。

    相关文章

      网友评论

          本文标题:关于多线程

          本文链接:https://www.haomeiwen.com/subject/owhkwhtx.html