substance
substance
全部文章
未归档
题解(7)
归档
标签
去牛客网
登录
/
注册
substance的博客
做最好的自己
全部文章
/ 未归档
(共176篇)
使用Junit测试hashTable与ConcurrentHashMap性能
1.数据量比较打的时候CurrentHashMap的效率要更高 package com.ydlclass.JUnit; import com.ydlclass.collection.CountDownLatchTest; import org.junit.Test; import java.u...
2022-05-30
0
434
JUnit单元测试框架
1.单元测试框架,比较容易的方便对写出的方法进行测试验证; 2.需要导入两个包: 3.对方法或者接口进行测试;自动化测试不需要人为干预;单元测试用例相对独立,由junit调用; 4.断言: JUnit的断言都在assert这个类当中:(断言为null,断言为真,断言为假,断言相等等等其他的静态方法...
2022-05-30
0
373
guava提供的不可变集合
1.对于线程安全的最好办法是map不可变,从而天然的支持了线程安全; 2.需要在项目构建中导入guava包,以及在需要使用的模块中导入guava; 3.使用: package com.ydlclass.collection; import com.google.common.collect.Imm...
2022-05-30
0
481
循环链表产生的原因,以及分段锁
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
首页
上一页
1
2
3
4
5
6
7
8
9
10
下一页
末页