• 线程状态图


    线程的状态图

    1.解释线程和进程的区别?
    <1>线程的尺度划分小于进程,线程隶属于某个进程。
    <2>进程是程序的一种动态形式,是CPU,内存等资源占用的基本单位
    ,而线程是不能独立的占有这些资源的
    <3>进程之间相互独立,通信比较困难,而线程之间共享一块内存区域,通信方便。线程是CPU调度的基本单位
    <4>进程在执行过程中,包含比较固定的入口、执行顺序和出口,而线程的这些过程会被应用程序所控制。

    2.如何让一个类成为线程类?
    <1>实现java.lang.Runnable接口
    <2>继承java.lang.Thread类

    3.简述线程的几种状态?
    1). 新建状态(New):用new语句创建的线程对象处于新建状态,此时它和其他Java对象一样;仅在堆区中被分配了内存;
    2). 就绪状态(Runnable):当一个线程对象创建后,其他线程调用它的start()方法,
    该线程就进入就绪状态,Java虚拟机会为它创建方法调用栈。
    处于这个状态的线程位于可运行池中, 等待获得CPU的使用权。
    3). 运行状态(Running):处于这个状态的线程占用CPU,执行程序代码。在并发运行环境中,如果计算机只有一个CPU,
    那么任何时刻只会有一个.线程处于这个状态。如果计算机有多个CPU, 那么同一时刻可以让几个线程占用不同的CPU,使它们都处于运行状态。只有处于就绪状态的线程才有机会转到运行状态。
    4). 阻塞状态(Blocked):指线程因为某些原因放弃CPU, 暂时停止运行。
    当线程处于阻塞状态时,Java虚拟机不会给线程分配CPU,直到线程重新进入就绪状态,
    它才有机会转到运行状态。
    5). 死亡状态(Dead):当线程退出run()方法时,就进入死亡状态,该线程结束生命周期。
    线程有可能是正常执行完run()方法退出,也有可能是遇到异常而退出。
    不管线程正常结束还是异常结束,都不会对其他线程造成影响。

    4.sleep() 和 wait() 有什么区别?
    sleep()是线程类方法,导致线程暂定执行指定的时间,将执行机会让给其他线程,
    不会释放对象的锁
    wait()是Object类方法,导致本线程放弃对象锁,只有执行notify或notifyAll方法后,
    才能获得对象锁进入就绪再到运行状态

    5.启动一个线程是调用run()还是start()方法?
    启动一个线程是调用start()方法,使线程所代表的虚拟处理机处于可运行状态,
    这意味着它可以由JVM 调度并执行,
    这并不意味着线程就会立即运行。run()方法是线程启动后要进行回调(callback)的方法。

  • 相关阅读:
    element-ui的table表格控件表头与内容列不对齐问题
    uniapp 调用手机相机拍照实现图片上传
    配置Git忽略文件
    【转载】Java的几种常见排序算法
    httpclient封装
    idea 启动springboot项目时报错:org.springframework.beans.factory.BeanCreationException: Error creating bean with name 'sqlSessionFactory' defined in class path resource
    shell脚本监控网站,异常则进行邮件报警
    nginx配置图片跨域访问
    Nginx基于多端口、多域名配置
    docker部署Nginx项目dockerfile
  • 原文地址:https://www.cnblogs.com/linliquan/p/11377312.html
Copyright © 2020-2023  润新知