当前位置: 首页 > news >正文

10.多线程

文章目录

  • 10.1简述线程、程序、进程的基本概念。以及他们之间关系是什么?
  • 10.2线程有哪些基本状态?

10.1简述线程、程序、进程的基本概念。以及他们之间关系是什么?

线程与进程相似,但线程是一个比进程更小的执行单位。一个进程在其执行的过程中可以产生多个线程。与进程不同的是同类的多个线程共享同一块内存空间和一组系统资源,所以系统在产生一个线程,或是在各个线程之间作切换工作时,负担要比进程小得多,也正因为如此,线程也被称为轻量级进程。

程序是含有指令和数据的文件,被存储在磁盘或其他的数据存储设备中,也就是说程序是静态的代码。

进程是程序的一次执行过程,是系统运行程序的基本单位,因此进程是动态的。系统运行一个程序即是一个进程从创建,运行到消亡的过程。简单来说,一个进程就是一个执行中的程序,它在计算机中一个指令接着一个指令地执行着,同时,每个进程还占有某些系统资源如 CPU 时间,内存空间,文件,输入输出设备的使用权等等。换句话说,当程序在执行时,将会被操作系统载入内存中。
线程是进程划分成的更小的运行单位。线程和进程最大的不同在于基本上各进程是独立的,而各线程则不一定,因为同一进程中的线程极有可能会相互影响。从另一角度来说,进程属于操作系统的范畴,主要是同一段时间内,可以同时执行一个以上的程序,而线程则是在同一程序内几乎同时执行一个以上的程序段。

10.2线程有哪些基本状态?

Java 线程在运行的生命周期中的指定时刻只可能处于下面 6 种不同状态的其中一个状态(图源《Java 并发编程艺术》4.1.4 节)。
在这里插入图片描述
线程在生命周期中并不是固定处于某一个状态而是随着代码的执行在不同状态之间切换。Java 线程状态变迁如下图所示(图源《Java 并发编程艺术》4.1.4 节):
在这里插入图片描述
由上图可以看出:

线程创建之后它将处于 NEW(新建) 状态,调用 start() 方法后开始运行,线程这时候处于 READY(可运行) 状态。可运行状态的线程获得了 cpu 时间片(timeslice)后就处于 RUNNING(运行) 状态。

操作系统隐藏 Java 虚拟机(JVM)中的 READY 和 RUNNING 状态,它只能看到 RUNNABLE 状态(图源:HowToDoInJava:Java Thread Life Cycle and Thread States),所以 Java 系统一般将这两个状态统称为 RUNNABLE(运行中) 状态 。

在这里插入图片描述
当线程执行 wait()方法之后,线程进入 WAITING(等待) 状态。进入等待状态的线程需要依靠其他线程的通知才能够返回到运行状态,而 TIME_WAITING(超时等待) 状态相当于在等待状态的基础上增加了超时限制,比如通过 sleep(long millis)方法或 wait(long millis)方法可以将 Java 线程置于 TIMED WAITING 状态。当超时时间到达后 Java 线程将会返回到 RUNNABLE 状态。当线程调用同步方法时,在没有获取到锁的情况下,线程将会进入到 BLOCKED(阻塞) 状态。线程在执行 Runnable 的run()方法之后将会进入到 TERMINATED(终止) 状态。

http://www.lryc.cn/news/112875.html

相关文章:

  • 【有关数据库的编码格式和导出备份】
  • 直播招聘小程序解决方案
  • HadoopWEB页面上传文件报错Couldn‘t upload the file course_info.txt
  • 面试热题(倒数第k个结点)
  • EVE-NG MPLS 静态 LSP
  • 华秋亮相2023世界汽车制造技术暨智能装备博览会,推动汽车产业快速发展
  • 华为OD机试真题【开心消消乐】
  • txt去重
  • 系统集成测试与验收
  • ElementPlus文件上传 ,在上传前钩子中判断文件是否为图片
  • 涂鸦智能获Matter Non-VID Scoped PAA资质 助力开发者拥抱Matter生态
  • nsqd的架构及源码分析
  • ​LeetCode解法汇总344. 反转字符串
  • 【C语言基础】数组的高级应用(上)
  • 面试题:bind、call、apply 区别?如何实现一个 bind?
  • 【SpringBoot学习笔记】01.第一个程序HelloWorld
  • 【学会动态规划】买卖股票的最佳时机含手续费(16)
  • 网络原因导致git下载报错处理办法
  • APP后端选择什么服务器
  • 什么是反射机制,反射机制的应用场景
  • Visual Studio 2019 实用功能设置(背景颜色,代码字体及行号设置)
  • 简述Mysql索引
  • windows .gitignore 加入文件名后 依然可以从git status中看到文件问题
  • 召唤神龙打造自己的ChatGPT
  • 裝修公司同室內設計公司有咩分別?
  • android oaid
  • 利用XSS在线平台获取用户cookie
  • rsync 命令以及脚本使用
  • 【数理知识】协方差,随机变量的的协方差,随机变量分别是单个数字和向量时的协方差
  • WebDAV之π-Disk派盘+可达漫画