摘要: 原子操作 原子性就是指该操作是不可再分的。不论是多核还是单核,具有原子性的量,同一时刻只能有一个线程来对它进行操作。原子操作可以是一个步骤,也可以是多个步骤,但是其顺序不可以被打乱,也不可以被切割而只执行其中的一部分(不可中断性)。将操作视作一个整体,资源在该次操作中保持一致,这是原子性的核心特征。 阅读全文
posted @ 2019-07-17 19:57 CodingDiary 阅读(1470) 评论(2) 推荐(0) 编辑
摘要: Java内存模型 VS JVM运行时数据区 首先Java内存模型(JMM)和JVM运行时数据区并不是一个东西,许多介绍Java内存模型的文章描述的堆,方法区,Java虚拟机栈,本地方法栈,程序计数器这东西并不是Java内存模型的内容而是JVM运行时数据区的内容。要理解二者的区别就要了解《Java虚拟 阅读全文
posted @ 2019-07-15 20:43 CodingDiary 阅读(763) 评论(0) 推荐(0) 编辑
摘要: 为什么要用线程池 线程是不是越多好? 线程在Java中是一个对象, 更是操作系统的资源, 线程额创建和销毁都需要时间,如果 创建时间+销毁时间>执行任务时间 就很不合算 Java对象占用堆内存,操作系统线程占用系统内存, 根据JVM规范,一个线程默认最大栈大小为1M, 这个栈空间是要从操作系统内存中 阅读全文
posted @ 2019-07-12 20:43 CodingDiary 阅读(2233) 评论(0) 推荐(0) 编辑
摘要: Java中实现线程的方式 Java中实现多线程的方式的方式中最核心的就是 run()方法,不管何种方式其最终都是通过run()来运行。 Java刚发布时也就是JDK 1.0版本提供了两种实现方式,一个是继承Thread类,一个是实现Runnable接口。两种方式都是去重写run()方法,在run() 阅读全文
posted @ 2019-07-11 21:37 CodingDiary 阅读(1081) 评论(0) 推荐(0) 编辑
摘要: 线程通信的方式 要想实现线程之间的协同, 如: 线程先后执行顺序, 获取某个线程的执行结果等, 涉及线程之间的相互通信, 分为下面四类 文件共享 网络共享 变量共享 JDK提供的线程协调API 细分为: suspend/resume, wait/notify, park/unpark 文件共享 变量 阅读全文
posted @ 2019-07-10 20:51 CodingDiary 阅读(318) 评论(0) 推荐(0) 编辑
摘要: 线程状态 6 个状态定义: java.lang.Thread.State New: 尚未启动的线程的线程状态 Runnable: 可运行线程的线程状态, 等待CPU调度 Blocked: 线程阻塞, 等待监视器锁定的线程状态 Waiting: 等待线程的线程状态, 下列不带超时的方式: Object 阅读全文
posted @ 2019-07-09 22:37 CodingDiary 阅读(226) 评论(0) 推荐(0) 编辑
摘要: CPU性能优化手段 - 缓存 为了提高程序的运行性能, 现代CPU在很多方面对程序进行了优化例如: CPU高速缓存, 尽可能的避免处理器访问主内存的时间开销, 处理器大多会利用缓存以提高性能 多级缓存 L1 Cache (一级缓存)是CPU第一层高速缓存, 分为数据缓存和指令缓存, 一般服务器CPU 阅读全文
posted @ 2019-07-08 20:52 CodingDiary 阅读(2134) 评论(0) 推荐(0) 编辑
摘要: class文件内容 class文件包含Java程序执行的字节码 数据严格按照格式紧凑排列在class文件的二进制流,中间无分割符 文件开头有一个0xcafebabe(16进制)特殊的标志 JVM运行时数据区 线程独占: 每个线程都会有它独立的空间,随线程的生命周而创建和销毁 线程共享: 所有线程都能 阅读全文
posted @ 2019-07-08 20:51 CodingDiary 阅读(1535) 评论(0) 推荐(0) 编辑