• 线程和进程


    1.进程和线程分别是什么?
    进程:在操作系统中运行的程序就是进程,如看视频。
    线程:线程是程序更小的执行单元。一个进程中可以有多个线程,如视频中听声音,看图像,显示字幕。
    进程与线程的区别:
    (1)根本区别:进程是资源分配的基本单位,线程是程序调度和执行的基本单位。
    (2)开销:每个进程都有独立的代码和数据空间(进程上下文),进程间的切换会有较大的开销。

       线程可以看成轻量级的进程,同一类线程共享代码和数据空间,每个线程有独立的运行栈和程序计数器(PC),线程切换的开销小。

    (3)所处环境:在操作系统中能同时运行多个任务(程序)。
    在同一应用程序中有多个顺序流同时执行。
    (4)分配内存:系统在运行的时候会为每个进程分配不同的内存区域。

    除了CPU之外,不会为线程分配内存(线程所使用的资源是它所属的进程的资源),线程组只能共享资源。

    (5)包含关系:没有线程的进程可以被看成单线程,如果一个进程内拥有多个线程,则执行过程不是一条线的,而是多条线(线程)共同完成的。

    线程是进程的一部分,所以线程有时被称为轻权进程或者是轻量级进程。

    2.什么是多线程?

    多线程就是指一个进程中同时有多个执行路径(线程)正在执行。

    3.为什么要使用多线程?

      (1)在一个程序中,有很多的操作是非常耗时的,如数据库读写操作,IO操作等,如果使用单线程,那么程序就必须等待这些操作执行完成之后才能执行其他操作。使用多线程,可以在将耗时任务放在后台继续执行的同时,同时执行其他操作。(比如在下载资源的同时还可以做其他操作)

      (2)可以提高程序的效率。

      (3)在一些等待的任务上,如用户输入,文件读取等,多线程就非常有用了。

    4.实现多线程的方法:

    (1)继承Thread类,重写run()方法,继承了Thread类,就不能继承其他类了:
    (2)实现Runnable接口,重写run()方法,没有返回值:
     
    (3)实现Callable接口,重写call()方法,有返回值,可以抛出异常:

    5.线程的五大状态:新建状态,就绪状态,运行状态,阻塞状态,死亡状态。

    注意:(1)线程进入死亡状态之后不能重新开启,重新开启是新的线程。

           (2)线程进入阻塞状态之后,重新恢复的话是进入就绪状态。 

    6.线程进入就绪状态的四个原因:

      (1)创建线程以后,调用start()方法;

      (2)解除阻塞,从阻塞状态恢复;

    (3)调用yield()方法,结束中断,礼让线程,让当前正在执行的线程暂停,不是阻塞状态,而是将线程从运行状态转入就绪状态。

    (4)JVM将CPU从本地线程切换到其他线程。 

    7.线程进入阻塞状态的四种原因: 

    (1)调用sleep()方法:sleep()方法(休眠)是线程类(Thread)的静态方法,调用此方法会让当前线程暂停执行指定时间,将执行机会(CPU)让给其他线程,但是对象的锁依然保持,因此休眠时间结束后会自动恢复(线程回到就绪状态)。

    (2)调用wait()方法:wait()是Object类的方法,调用对象的wait()方法导致当前线程放弃对象的锁(线程暂停执行),进入对象的等待池(wait一pool),只有调用对象的notify()方法(或notifyAll()方法)时才能唤醒等待池中的线程进入等锁池(lock pool),如果线程重新获得对象的锁就可以进入就绪状态。

    (3)调用join()方法:阻塞指定线程等到另一个线程完成以后再继续执行。合并线程,待此线程执行完毕后,再去执行其他线程,其他线程阻塞。

    (4)io操作中的read和Write。 

    8.终止线程的两种方式:

    (1)线程正常执行完毕:次数限制;

    (2)外部干涉:加入标识。

    注意:不要不使用stop和deatory终止线程,不安全。

    9.什么是守护线程?

    (1)线程:线程分为用户线程和守护线程。
    (2)虚拟机必须等待用户线程执行完毕;
    (3)虚拟机不必等待守护线程执行完毕; 
    (4)守护线程是为用户线程服务的。
  • 相关阅读:
    阿里云高级技术专家周晶:基于融合与协同的边缘云原生体系实践
    Spring Boot Serverless 实战系列“架构篇” 首发 | 光速入门函数计算
    基于 EMR OLAP 的开源实时数仓解决方案之 ClickHouse 事务实现
    【ClickHouse 技术系列】 在 ClickHouse 中处理实时更新
    LeetCode_Two Sum
    LeetCode_ Remove Element
    LeetCode_Same Tree
    LeetCode_Symmetric Tree
    LeetCode_Path Sum
    LeetCode_Merge Sorted Array
  • 原文地址:https://www.cnblogs.com/liqinzhen/p/12801113.html
Copyright © 2020-2023  润新知