
Java
文章平均质量分 65
舒适边缘
坚定目标是做最好的准备,降低预期是做最坏的打算
展开
-
synchronized
【代码】synchronized。原创 2023-12-07 14:51:44 · 873 阅读 · 0 评论 -
AQS
如果tail节点为空,则同步队列尾空,创建一个空的节点作为head和tail节点。否则CAS 将node节点添加到同步队列尾部。挂起当前线程,并返回线程中断状态。原创 2023-12-07 14:49:15 · 796 阅读 · 0 评论 -
线程池
降低消耗,线程可以重复使用,降低创建和销毁的销毁提高响应速度,不需要等到线程创建了再执行,多线程可以并发执行线程池可以加强线程的监控和管理,进行统一分配。原创 2023-12-07 14:47:47 · 838 阅读 · 0 评论 -
死锁
两个或多个持有锁资源的线程,互相等待对方的锁资源,而造成无限等待的情况。原创 2023-12-07 14:41:29 · 354 阅读 · 0 评论 -
CAS
CAS底层实现会加Lock指令前缀,单核的情况下不会使用Lock指令前缀。Lock指令前缀的作用。原创 2023-12-07 14:40:42 · 362 阅读 · 0 评论 -
intel手册对lock前缀的说明如下
很显然,这会带来昂贵的开销。从Pentium 4,Intel Xeon及P6处理器开始,intel在原有总线锁的基础上做了一个很有意义的优化:如果要访问的内存区域(area of memory)在lock前缀指令执行期间已经在处理器内部的缓存中被锁定(即包含该内存区域的缓存行当前处于独占或以修改状态),并且该内存区域被完全包含在单个缓存行(cache line)中,那么处理器将直接执行该指令。由于在指令执行期间该缓存行会一直被锁定,其它处理器无法读/写该指令要访问的内存区域,因此能保证指令执行的原子性。原创 2023-12-07 14:38:37 · 497 阅读 · 0 评论 -
Volatile
同时Lock指令会进行缓存锁定,使得其他CPU无法访问,同时Lock前缀使得store buffers刷入缓存行(其他CPU读取该变量时,发现缓存行的状态为I,同时存在其他缓存行状态为M-即刚才store buffers刷入缓存行,这时会先让该缓存行-M的数据刷入内存,然后CPU从内存读取,其实就是缓存一致性协议MESI),同时使得其他cpu或者内核无效化,通过MESI保证可见性。早期保证一致性,通过锁住总线,但是锁住后其他CPU无法访问内存,导致效率低下,引入MESI等缓存一致性协议.原创 2023-12-07 14:38:05 · 382 阅读 · 0 评论 -
ThreadLocal
每个线程都有独立的副本,线程之间互不影响。原创 2023-12-07 14:36:56 · 362 阅读 · 0 评论