Java线程

title: Java线程
date: 2020-07-25 12:14:41
tags:
categories:

  • 面试题
  • Java线程

线程基础

  1. 何为线程、进程
    • 进程
      • 程序执行一次的过程
      • 程序执行的最小单位
    • 线程
      • 线程是进程的一个小单元,一个进程可能有一个或者多个线程
      • 线程之间共享堆内存和方法区
      • 每个线程有自己独有的本地方法栈、虚拟机栈以及程序计数器
  2. 简要描述线程、进程之间的关系、区别以及优缺点
    • 运行时数据区图
      • 图示:
        运行时数据区图
      • 程序计数器为什么是私有的
      • 虚拟机栈和本地方法栈为什么是私有的
      • 介绍一个堆和方法区
    • 关系
      • 一个线程中可能包含一个或者多个线程
      • 线程是进程划分的更小的执行单位
    • 区别
      • 线程占用的系统资源比进程少
      • 线程之间的切换的开销小,切换速度快
      • 进程是各自独立的运行
    • 优缺点
      • 线程之间的切换开销小。线程之间切换时候,依据程序计数器的变化;当程序计数器为0时,说明线程空闲,可以直接执行;当线程执行时候,程序计数器会一直累加,而线程执行完成后,程序计数器会累减,直到程序计数器为0,线程才是空闲的
      • 线程占用资源少。程序要想获得资源,需要获取cpu的时间片,等CPU时间片是空闲时候,程序可以直接调用资源;当CPU时间片是忙碌时候,线程需要等待CPU空闲才可以调用资源
      • 进程不利于资源的管理和保护
  3. 说一说并发和并行的区别
    • 并行 在单位时间内,多个任务同时运行
    • 并发 在一个时间段内,多个任务同时运行
  4. 为什么使用多线程
    • 充分的利用系统资源,多核CPU时代,减少上下文切换的开销,提高CPU的利用率
    • 提高系统的并发能力和性能
  5. 使用多线程的问题
    • 线程安全问题
    • 线程死锁问题(后面会写)
    • 内存泄漏问题
  6. 线程的状态
    • NEW 线程创建
    • RUNNABLE 线程运行
    • BLOCKING 线程阻塞
    • WAITTING 线程等待
    • TIME_WAITTING 线程等待(限时)
    • TERMINATED 线程终止
    • 图示
      线程状态
  7. 什么是上下文切换
    • 任务从保存到记加载的过程就是一次上下文切换
    • 当前任务的执行完成之后,CPU时间片切换到其他任务之前,记录自己的状态,以便下次任务切换回来,可以继续加载当前任务的状态
    • 线程数>CPU核心数 CPU采用给线程分配时间片并轮询的方式
  8. 什么是线程死锁,怎么避免死锁
    • 线程死锁
      多个线程同时阻塞,一个或者多个线程都在等待某一个资源被释放
    • 避免线程的方法
      • 破坏互斥条件:无法实现,同步即互斥
      • 破坏请求和保持条件:一次性请求任务执行所需要的所有资源
      • 破幻不剥夺条件:占用部分资源的线程进一步申请其他资源时候,如果申请不到,则释放该资源占用的所有的资源
      • 破幻循环等待条件:按特定顺序申请资源
  9. 说一说sleep()方法与wait()方法的区别和共同点
    • 共同点
    • 区别
  10. 为什么调用start()方法会执行run()方法而不直接调用run()方法

线程进阶

吴超 wechat
subscribe to my blog by scanning my public wechat account