【Java 并发编程】线程简介 ( 并发类型 | 线程状态 | CPU 数据缓存 )
文章目录
- 一、并发类型
- 二、线程状态
- 三、CPU 数据缓存
一、并发类型
并发类型 :
- Thread
- Runnable
- Future
- ThreadPool
其中 Runnable , ThreadPool 都是基于 Thread 执行的 ;
二、线程状态
线程状态 :
线程刚创建时 , 处于 " 新建状态 " ;
调用线程 start()
方法之后 , 线程进入 Runnable " 可运行状态 " , 此时等待 OS 调度分配 CPU 时间片 运行 ;
线程分配到 CPU 时间片 之后 , 线程进入 Running " 运行状态 " , 如果线程分配的 CPU 时间片运行完毕 , 线程又回到 Runnable " 可运行状态 " ;
如果运行过程中 , 手动调用了 Thread.sleep()
或 join()
方法 , 线程进入了 " 阻塞状态 " , 线程唤醒之后又回到 Runnable " 运行状态 " ;
线程运行完毕之后 , 或者线程执行出现异常 , 进入 Dead " 死亡状态 " ;
三、CPU 数据缓存
程序执行时 , 主要是 CPU 执行程序中的指令 , 指令的运行 , 还需要 加载相应的数据 ;
CPU 运行的速度很快 , 如果每次 使用 I/O 总线访问内存获取 CPU 执行所需的数据 , 无法将 CPU 的性能优势发挥到最大 ;
数据从 磁盘 中读取 , 加入到 内存 中 , 线程执行后 , 会将需要操作的数据加入到 CPU 缓存 中 ;
CPU 缓存分为 L1 , L2 , L3 , 333 个级别的缓存 , 如下图所示 ;
CPU 执行线程时 , 不直接操作内存中的数据 , 而是通过 CPU 缓存进行处理 ;
JMM ( Java Memory Model - Java 内存模型 ) 参考了 CPU 缓存模型 , CPU 都是多核的 , 每个核中都有 L1 和 L2 缓存 , L3 缓存整个 CPU 的所有核心共同使用 ;
Java 内存模型只是一种规范 ;
Java 虚拟机运行时内存 , 是不同的虚拟机实现的不同的内存使用方式 ;
每种虚拟机的底层实现都是不同的 ;
Java 线程 运行时 , 每个 Java 线程都配套一个 工作内存 , 然后工作内存从 主内存 中获取数据 , 主内存被所有工作内存共享 ;
- 工作内存 就是 线程的 本地内存 , 其中存储的是主内存中的 变量副本 , 使用主内存的变量前 , 先将变量拷贝工作内存中 ;
- 当在线程中 修改了工作内存中的数据 , 需要同时 将变量的修改同步到主内存中 ;
这里的 工作线程 / 本地线程 相当于 CPU 中的 L1 / L2 缓存 , 主内存 相当于 CPU 中的 L3 缓存 ;
如果多个线程同时对 主内存 中的同一个变量进行修改 , 变量的值被不同线程按照不同顺序进行改变 , 主线程中的这个变量是 线程不安全的 ;
【Java 并发编程】线程简介 ( 并发类型 | 线程状态 | CPU 数据缓存 )相关推荐
- java线程本地变量_Java并发编程示例(九):本地线程变量的使用
这篇文章主要介绍了Java并发编程示例(九):本地线程变量的使用,有时,我们更希望能在线程内单独使用,而不和其他使用同一对象启动的线程共享,Java并发接口提供了一种很清晰的机制来满足此需求,该机制称 ...
- 【Java并发编程】之二:线程中断
[Java并发编程]之二:线程中断 使用interrupt()中断线程 当一个线程运行时,另一个线程可以调用对应的Thread对象的interrupt()方法来中断它,该方法只是在目标线程中设置一 ...
- Java并发编程(3):线程挂起、恢复与终止的正确方法(含代码)
挂起和恢复线程 Thread 的API中包含两个被淘汰的方法,它们用于临时挂起和重启某个线程,这些方法已经被淘汰,因为它们是不安全的,不稳定的.如果在不合适的时候挂起线程(比如,锁定共享资源时),此时 ...
- Java7并发编程指南——第二章:线程同步基础
Java7并发编程指南--第二章:线程同步基础 @(并发和IO流) Java7并发编程指南第二章线程同步基础 思维导图 项目代码 思维导图 项目代码 GitHub:Java7ConcurrencyCo ...
- Java7并发编程指南——第一章:线程管理
Java7并发编程指南--第一章:线程管理 @(并发和IO流) Java7并发编程指南第一章线程管理 思维导图 项目代码 思维导图 项目代码 GitHub:Java7ConcurrencyCookbo ...
- Java并发编程的艺术-并发编程基础
Java从诞生开始就明智地选择了内置对多线程的支持,这使得Java语言相比同一时期的其他语言具有明显的优势.线程作为操作系统调度的最小单元,多个线程能够同时执行,这将显著提升程序性能,在多核环境中表现 ...
- 01 - Java并发编程与高并发解决方案笔记-基础篇
01 - Java并发编程与高并发解决方案笔记-基础篇 基础篇很重要!很重要!很重要!!!一定要理解和认真思考. 01 - Java并发编程与高并发解决方案笔记-基础篇 1.课程准备 2.并发编程基础 ...
- 【专家坐堂】四种并发编程模型简介
本文来自网易云社区 概述 并发往往和并行一起被提及,但是我们应该明确的是"并发"不等同于"并行" • 并发 :同一时间 对待 多件事情 (逻辑层面) ...
- Java 高并发_JAVA并发编程与高并发解决方案 JAVA高并发项目实战课程 没有项目经验的朋友不要错过!...
JAVA并发编程与高并发解决方案 JAVA高并发项目实战课程 没有项目经验的朋友不要错过! 1.JPG (37.82 KB, 下载次数: 0) 2018-12-3 09:40 上传 2.JPG (28 ...
最新文章
- centos7ftp服务器的搭建
- sql server2005用户权限如何设置
- 信息竞赛进阶指南--中缀表达式转后缀表达式并求值(模板)
- 基本功 | Java即时编译器原理解析及实践
- Linux编程(6)_makefile
- 如何提升人脸识别的精度_宝比万像人脸识别:健身房人脸识别门禁系统如何助力健身房管理?...
- 2020张宇1000题【好题收集】【第七章:三重积分、曲线曲面积分】
- 单片机系统中实用的按键驱动(STM32、51都适用)
- 光纤交换机使用方法及应用方案详解
- 命令行排序文件夹大小
- 解决Ubuntu远程连接mysql连不上的问题
- 现在时间是 a 点 b 分,请问 t 分钟后,是几点几分?
- 利用VMWare和软路由多播实现校园网带宽叠加
- github图书馆座位预约_我们在Github上分析了60,678个图书馆–这是前100名
- aui移动端UI框架
- vue-webpack.config使用七牛云cdn镜像加速
- 光纤传感器实验模块_光纤传感器位移特性实验
- 赠与今年的大学毕业生 胡适
- java_异常_练习题:处理输入非数字异常和除数为0的异常。
- Linux小白详细笔记
热门文章
- [转]我们为什么需要工作流
- extjs gridpanel滚动条问题显示数据不完整
- 基于silverlight4(beta)的摄像头应用(Beta2)发布
- hello word 程序 ——简单的spring ioc 学习
- ROS学习笔记_创建工作空间(一)
- [原创] 为什么模除的时候一般建议选择素数来除?比如说hashtable的桶数会取一个素数...
- 用openoffice+jodconverter+webuploader+pdf.js实现文件上传、在线预览功能
- Android中配置JDK和SDK的环境变量
- jni java c++ 参数传递问题解决
- JAVASCRIPT学习笔记----Javascript引用类型