编辑介绍每个Thread对象, 内部有一个ThreadLocalMap threadLocals, 这是一个哈希表, 底层是一个Node[ ] table;当在某个线程中调用ThreadLocal的set方法时, 会使用Thread.currentThread获取当前先线程的thread对象, 然后将ThreadLocal对象作为key, 将set方法的参数作为value, 构建一个Entry,
并发编程三大问题在并发编程中,原子性、有序性和可见性是三个重要的问题,解决这三个问题是保证多线程程序正确性的基础。原子性: 指的是一个操作不可分割, 要么全部执行完成, 要么不执行, 不存在执行一部分的情况.有序性: 有序性是指程序的执行顺序与程序中代码的顺序一致。在多线程环境下,由于线程的交替执行和指令重排等因素,可能会导致代码的执行顺序与预期不一致可见性: 可见性是指当一个线程修改了共享变量
对象的内存布局首先抛出一个经典面试题: 一个 Object 对象占多大?这里我用工具打印了出来, 发现是 "16bytes", 也就是 16B; 为什么? 请继续往下看;普通对象(除了数组), 由markword, 类型指针, 实例数据(就是对象里的成员), 对齐填充(整个对象大小要能被8B整数, 方便64bit总线)构成;markword 中保存了监视器锁的信息, GC 的信息, 还可能保存默认
JVM线程 / 操作系统线程操作系统的内核级线程, 是CPU资源调度的最小单位;以最简单的时间片轮转调度算法为例, 在定时中断的中断处理函数中, 操作系统的调度程序选出一个就绪线程, 让其上 CPU 运行;另外还有用户级线程, 由用户应用程序内部自己进行切换, 该过程对操作系统来说并不可见, 在操作系统眼里它就是在执行线程 A, 至于应用在线程内自己分离出来并自己负责切换的线程 A-a 和 线程
介绍每个Thread对象, 内部有一个ThreadLocalMap threadLocals, 这是一个哈希表, 底层是一个Node[ ] table;当在某个线程中调用ThreadLocal的set方法时, 会使用Thread.currentThread获取当前先线程的thread对象, 然后将ThreadLocal对象作为key, 将set方法的参数作为value, 构建一个Entry, 将此
Copyright © 2005-2024 51CTO.COM 版权所有 京ICP证060544号