ARTICLE DETAIL

资讯详情

深耕网站建设与运营推广的一线实战洞察。

多线程进阶

多线程进阶 Semaphore信号量计数器p操作申请v操作释放原子的阻塞互斥锁二元信号量CountDownLatch写时拷贝多线程使用Hash面试题HashMap线程不安全HashTable线程安全不推荐使用ConcurrentHashMap线程安全推荐使用HashTable给putget方法都加锁相当于给this对象加锁这也就意味着堆hash表中两个不同的对象操作会触发加锁ConcurrentHashMap优化点1hasp表中每个链表的头结点作为锁对象多个线程竞争不同的锁不会产生冲突如果多个线程对一个链表上的不同节点操作那么会触发锁冲突。这叫做锁桶也叫哈希桶。优化点2HashMap中size描述的是键值对的个数。键值对1个key1个value即一个entry。ConcurrentHashMap使用CAS的方法对size进行了修改避免加锁优化点3扩容场景当hash表中元素很多每个链表的长度很长这时就需要扩容扩容是创建一个更大的数组把原来hash表中的每个元素都插入到新的hash表的数组中如果元素特别多这个过程就会花费大量时间。ConcurrentHashMap采取“化整为零”的操作把原hash表中的元素分多次插入到新的hash表中
返回列表