多线程
心愿王
热爱学习
展开
-
CAS的实现
比较内存地址中的值是否和expected寄存器中的值相同,如果相同,就把swap寄存器中的值和address内存中的值进行交换(就是往内存中赋值)如果不相同就返回false。Java标准库给我们提供了原子类我们只就应用就好,例如:AtomicInteger类。基于CAS指令可以不加锁把多线程变成原子的,此过程不会产生加锁那种阻塞(无锁编程)来保证两个线程的原子性,还是会产生抢占式执行,但是它是原子的所以不怕。CAS是一个特殊的cpu指令主要完成的是比较和交换。原创 2024-01-29 20:44:11 · 332 阅读 · 0 评论 -
HashTable, HashMap, ConcurrentHashMap 之间的区别
他的每个哈希桶上都有一把锁,在多线程操作时只有多线程共同操作一个哈希桶时候才会产生锁竞争,在扩容时候在产生一个新的数组然后然后老元素和新元素就活共同往新数组里拷贝元素这就大大的增加了效率,添加完后,就把老数组删除掉。因为他没进行加锁操作,他的操作是非原子的可能导致数据出错,而且它的操做是不同步的可能会导致数据出现不一致的问题。关键字,它整个过程只加了一个锁,所以我们在扩容期间乃至多线程操作时候会出现锁竞争,导致效率非常低。HashMap 本⾝不是线程安全的。只是把方法简单的加了一个。原创 2024-01-29 18:18:35 · 353 阅读 · 0 评论 -
synchronized 和 ReentrantLock 之间的区别
多线程原创 2024-01-29 18:44:37 · 360 阅读 · 0 评论