线程
羯殇
这个作者很懒,什么都没留下…
展开
-
Volatile内存屏障
内存屏障四种类型: 1.1、Load指令和Store指令 Load指令(读屏障):将内存的数据拷贝到处理器缓存 Store指令(写屏障):让当前线程写入缓存的数据可以被其他线程看见 1.2、LoadLoad Barriers 排队,当第一个读屏障指令读取数据完毕之后,后一个读屏障指令才能够进行加载读取 (禁止读和读的重排序) 1.3、StoreStore Barriers 当A写屏障指令写完之后且保证A的的写入可以被其他处理器看见,再进行B的写入操作 (禁止写与写的重排序) 1.4、LoadStore Ba原创 2022-04-24 22:47:35 · 2443 阅读 · 0 评论 -
valatile
valatile: 保证变量的内存可见性 禁止指令重排序 内存可见性:当A线程改变某个变量的值时,其他线程读取时是最新的值 总线嗅探机制:基于主内存的处理器,当变量的地址值被改变时,重新从主内存读取内存地址到线程中,保证在线程中的变量可见性 问题:虽然valatile保证了线程变量的可见性,但在修改时依然是线程不安全的(读->写)。可以加锁或者使用原子类处理(AtomicInteger) 指令重排序: 步骤: 例如:B需要使用A的值,那么B一定排在A后面。基于内存可见性,让线程中的变量也会基于这一点原创 2022-03-28 00:57:49 · 241 阅读 · 0 评论 -
线程-线程池
线程池介绍: 开辟一片内存空间管理尚未死亡的线程,通过线程池进行线程调度 线程池类型: 固定尺寸的线程池: 固定了线程数量,加入线程数超过最大线程池最大线程数时,进入该线程池需要等待 单任务线程池: 线程池只持有一个线程,后续线程进入线程池需要等待,使用无界队列进行管理 ps: 无界队列:底层采用CAS自选进行队列管理,系统资源耗尽前没有空间上限 可变尺寸连接池: 线程池尺寸不定,没有大小限制 延迟连接池: 可以使线程进行延迟启动或者定期启动 单任务延迟连接池: 单线程延迟启动 自定义线程池: 自定义线程原创 2022-02-27 21:03:50 · 113 阅读 · 0 评论 -
线程基础篇
线程组成: 一个指向当前被执行指令的指令指针:IP寄存器,指向对应线程 一个栈:对线程的一个快照存储,记录了所有线程的运行状态,包括调用堆栈,锁池情况等 一个寄存器值的集合:定义了一部分描述正在执行线程的处理器状态的值 一个私有的数据区:该线程私有的数据 线程启动: 通过实现 Runnable 接口: 由于是实现接口,所以可以继承其他线程,多线程可以共用同一个对象,将cpu代码和对象分开,模型清晰。 需要访问当前线程,必须使用Thread.currentThread()方法。 通过继承 Thread 类本身原创 2022-02-27 20:40:32 · 88 阅读 · 0 评论