文章目录

  • 一、并发类型
  • 二、线程状态
  • 三、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 数据缓存 )相关推荐

  1. java线程本地变量_Java并发编程示例(九):本地线程变量的使用

    这篇文章主要介绍了Java并发编程示例(九):本地线程变量的使用,有时,我们更希望能在线程内单独使用,而不和其他使用同一对象启动的线程共享,Java并发接口提供了一种很清晰的机制来满足此需求,该机制称 ...

  2. 【Java并发编程】之二:线程中断

    [Java并发编程]之二:线程中断 使用interrupt()中断线程 ​ 当一个线程运行时,另一个线程可以调用对应的Thread对象的interrupt()方法来中断它,该方法只是在目标线程中设置一 ...

  3. Java并发编程(3):线程挂起、恢复与终止的正确方法(含代码)

    挂起和恢复线程 Thread 的API中包含两个被淘汰的方法,它们用于临时挂起和重启某个线程,这些方法已经被淘汰,因为它们是不安全的,不稳定的.如果在不合适的时候挂起线程(比如,锁定共享资源时),此时 ...

  4. Java7并发编程指南——第二章:线程同步基础

    Java7并发编程指南--第二章:线程同步基础 @(并发和IO流) Java7并发编程指南第二章线程同步基础 思维导图 项目代码 思维导图 项目代码 GitHub:Java7ConcurrencyCo ...

  5. Java7并发编程指南——第一章:线程管理

    Java7并发编程指南--第一章:线程管理 @(并发和IO流) Java7并发编程指南第一章线程管理 思维导图 项目代码 思维导图 项目代码 GitHub:Java7ConcurrencyCookbo ...

  6. Java并发编程的艺术-并发编程基础

    Java从诞生开始就明智地选择了内置对多线程的支持,这使得Java语言相比同一时期的其他语言具有明显的优势.线程作为操作系统调度的最小单元,多个线程能够同时执行,这将显著提升程序性能,在多核环境中表现 ...

  7. 01 - Java并发编程与高并发解决方案笔记-基础篇

    01 - Java并发编程与高并发解决方案笔记-基础篇 基础篇很重要!很重要!很重要!!!一定要理解和认真思考. 01 - Java并发编程与高并发解决方案笔记-基础篇 1.课程准备 2.并发编程基础 ...

  8. 【专家坐堂】四种并发编程模型简介

    本文来自网易云社区 概述 并发往往和并行一起被提及,但是我们应该明确的是"并发"不等同于"并行" •       并发 :同一时间 对待 多件事情 (逻辑层面) ...

  9. Java 高并发_JAVA并发编程与高并发解决方案 JAVA高并发项目实战课程 没有项目经验的朋友不要错过!...

    JAVA并发编程与高并发解决方案 JAVA高并发项目实战课程 没有项目经验的朋友不要错过! 1.JPG (37.82 KB, 下载次数: 0) 2018-12-3 09:40 上传 2.JPG (28 ...

最新文章

  1. centos7ftp服务器的搭建
  2. sql server2005用户权限如何设置
  3. 信息竞赛进阶指南--中缀表达式转后缀表达式并求值(模板)
  4. 基本功 | Java即时编译器原理解析及实践
  5. Linux编程(6)_makefile
  6. 如何提升人脸识别的精度_宝比万像人脸识别:健身房人脸识别门禁系统如何助力健身房管理?...
  7. 2020张宇1000题【好题收集】【第七章:三重积分、曲线曲面积分】
  8. 单片机系统中实用的按键驱动(STM32、51都适用)
  9. 光纤交换机使用方法及应用方案详解
  10. 命令行排序文件夹大小
  11. 解决Ubuntu远程连接mysql连不上的问题
  12. 现在时间是 a 点 b 分,请问 t 分钟后,是几点几分?
  13. 利用VMWare和软路由多播实现校园网带宽叠加
  14. github图书馆座位预约_我们在Github上分析了60,678个图书馆–这是前100名
  15. aui移动端UI框架
  16. vue-webpack.config使用七牛云cdn镜像加速
  17. 光纤传感器实验模块_光纤传感器位移特性实验
  18. 赠与今年的大学毕业生 胡适
  19. java_异常_练习题:处理输入非数字异常和除数为0的异常。
  20. Linux小白详细笔记

热门文章

  1. [转]我们为什么需要工作流
  2. extjs gridpanel滚动条问题显示数据不完整
  3. 基于silverlight4(beta)的摄像头应用(Beta2)发布
  4. hello word 程序 ——简单的spring ioc 学习
  5. ROS学习笔记_创建工作空间(一)
  6. [原创] 为什么模除的时候一般建议选择素数来除?比如说hashtable的桶数会取一个素数...
  7. 用openoffice+jodconverter+webuploader+pdf.js实现文件上传、在线预览功能
  8. Android中配置JDK和SDK的环境变量
  9. jni java c++ 参数传递问题解决
  10. JAVASCRIPT学习笔记----Javascript引用类型