substance
substance
全部文章
分类
未归档(185)
题解(7)
归档
标签
去牛客网
登录
/
注册
substance的博客
做最好的自己
全部文章
(共184篇)
循环链表产生的原因,以及分段锁
1.产生的原因:(jdk1.7中的HashMap是使用头插的方式put;线程争抢;线程争抢的时候扩容)此时就可能导致循环链表的问题出现。 2.扩容时会重新创建一个数组,并且会把旧的数据转移到新的数组当中;插入式头插法,读也是头插法,那么转移的过程就出现了问题。 3.此时由于循环链表的存在,就会导致...
2022-05-29
0
392
jdk1.7和1.8差别
1.jdk1.7使用的头插,那么上锁的对象就可能不在头上,就无法保证某个链表上的操作是唯一的。 2.jdk1.8之后就是用了尾插法,保证可以使用锁头的方式实现锁; 3.部分源码: jdk1.7的put方法中使用了尾插,导致1.7中实现多线程安全是使用分段的方式实现的; 4.jdk1.8的方法是...
2022-05-29
0
298
线程安全集合-ConcurrentHashMap
1.HashMap和CurrentHashMap在1.8中的两者的源码基本一致,但是后者使用了cas操作,有些地方加上了锁; 2.hashTable中的锁是通过锁put方法实现的,即使不同的线程put不同下标的元素都被上了锁。但是实际上,只有在多个线程对同一个下标的位置进行put操作时才是多线程安全...
2022-05-29
0
388
线程安全集合-CopyOnWriteList
1.CopyOnWriteList写时复制的链表(写操作方法时才会加锁,读方法不会加锁,保证一定的效率) Note:实现的大致流程是:对于读操作,不会限制,出现写操作时,会先copy原先的一个数组,并且上锁;等到写操作修改完之后将原先对list的引用只想复制后的列表。(读写分离)旧的list会被垃圾...
2022-05-29
0
586
Vector,hashTable使用代价较大
1.两者实现线程安全的方式都是通过重量级锁实现的,所以当代码量比较大时就会占用大量资源这显然不太可观; 2.hashMap和hashTable不同点: 2.1hashMap的key可以为nul,hashTable不可以为null,前者key为null是hash值为0,不为null时高低位与运算。 ...
2022-05-29
0
296
线程不安全的list,hashMap类使用Vector,hashTable代替
1.背景 package com.ydlclass.collection; import com.ydlclass.lock.ThreadUtil; import java.util.ArrayList; import java.util.List; import java.util.concu...
2022-05-29
0
285
semaphore
1.信号量:java.util.concurrent的一个工具类,可以设置参数,控制同时访问的个数;主要有方法acquire(),release()获取和释放令牌;可以用于限流操作。 2、停车场demo package com.ydlclass.collection; import com.yd...
2022-05-29
0
217
CountDownLatch和CyclicBarrier
1.有时主线程需要等待其他线程完成工作可以使用这种方法完成线程同步 package com.ydlclass.collection; import com.ydlclass.lock.ThreadUtil; import java.util.concurrent.CountDownLatch; ...
2022-05-28
0
234
线程安全(并发修改异常)
1.背景(增强for循环中即使没有并发修改异常,但是也会抛出这个错误) package com.ydlclass.collection; import java.util.*; public class ConcurrentModityTest { public static void ...
2022-05-28
0
455
Collections工具类
1.常见的静态方法 package com.ydlclass.collection; import java.util.ArrayList; import java.util.Collections; import java.util.List; public class Collections...
2022-05-28
0
309
首页
上一页
1
2
3
4
5
6
7
8
9
10
下一页
末页