Broad Broad
首页
  • 中间件相关

    • RabbitMQ
前端
JVM
杂文
八股文
关于
收藏
  • 分类
  • 标签
  • 归档
GitHub (opens new window)

Wang Bu Zheng

开发农名工
首页
  • 中间件相关

    • RabbitMQ
前端
JVM
杂文
八股文
关于
收藏
  • 分类
  • 标签
  • 归档
GitHub (opens new window)
  • Mysql

  • Java

    • 基础

    • 集合

    • 多线程

      • 多线程基础上
  • 八股文
  • Java
  • 多线程
WangBuZheng
2022-08-08
目录

多线程基础上

# 进程是什么?怎么理解进程

进程是程序的一次执行过程,是系统运行程序的基本单位。 在windows系统任务管理器中,可以看到有很多的进程正在运行。如下图:

# 线程是什么?怎么理解线程

百科: 线程是操作系统能够进行运算调度的最小单位。它被包含在进程之中,是进程中的实际运作单位。 一个进程可以包含多个线程,犹如迅雷软件当我们下载多个文件时,每个下载的文件就是开启了一个线程去下载。

# 并发与并行的区别

  • 并发: 两个或两个以上的作业在同一 时间段执行,也就是说两个孩子 就一个冰淇淋你一个他一口来回切换这吃。只不过两人都想吃速度快,以至于觉得在同时进行。其实是来回切换的。
  • 并行: 两个或两个以上的作业在同一 时刻执行,也就是说两个孩子 一人一个冰淇淋不抢不闹 同时吃自己的冰淇淋。

# 线程的状态和生命周期

状态 详解
NEW 初始化状态: 线程被创建 但是没有调用start() 方法
RUNNABLE 运行状态: 详细的又分为就绪状态和运行状态。合叫为运行状态
BLOCKED 阻塞状态: 线程上锁阻塞
WAITING 等待状态: 进入等待状态,需要等待其他线程通知是中断
TIME_WAITING 超时等待状态: 不同于 WAITING,它可自行返回。
TERMINATED 终止状态: 线程执行完毕

来自韩老师课程一图链接

# sleep()和wait()区别和共同点?

  1. sleep没有释放锁,而wait释放了锁。
  2. sleep方法执行完后,线程到时间会自动唤醒,而wait方法不会自动唤醒,需要别的线程调用同一个对象的 notify() 或者 notifyall()
  3. wait方法通常被用于线程交互/通信,而sleep通常被用于暂停执行

# 为何不能直接调用run()方法?

new 一个 Thread,线程进入了新建状态。调用 start()方法,会启动一个线程并使线程进入了就绪状态,当分配到时间片后就可以开始运行了。 start() 会执行线程的相应准备工作,然后自动执行 run() 方法的内容,这是真正的多线程工作。 但是,直接执行 run() 方法,会把 run() 方法当成一个 main 线程下的普通方法去执行,并不会在某个线程中执行它,所以这并不是多线程工作。

编辑 (opens new window)
上次更新: 2022/08/17, 14:37:22
集合面试题总结

← 集合面试题总结

最近更新
01
垃圾回收算法-清除
03-28
02
垃圾回收算法-标记
02-13
03
方法区
02-03
更多文章>
Theme by Vdoing | Copyright © 202102-2023 Broad-Bean | 豫ICP备2022009421号-1
  • 跟随系统
  • 浅色模式
  • 深色模式
  • 阅读模式