并发Collections
2016-03-04 本文已影响73人
Brucetoo
1.TimeUnit
Thread.sleep() 是一个静态方法,暂停线程时它不会释放锁,该方法会抛出InterrupttedException异常(如果有线程中断了当前线程),其可读性很低,不能清楚的知道到底暂停了多久,对比两者用法就会发现 TineUnit表达的很清楚
TimeUnit.MINUTES.sleep(4); // sleeping for 4 minutes
Thread.sleep(4*60*1000);
2. CopyOnWriteArrayList
CopyOnWriteArrayList是jdk concurrent包中提供的一个非阻塞型的,线程安全的List实现。
-
CopyOnWriteArrayList
在进行数据修改时,都不会对数据进行锁定,每次修改时,先拷贝整个数组,然后修改其中的一些元素,完成上述操作后,替换整个数组的指针。 - 对
CopyOnWriteArrayList
进行读取时,也不进行数据锁定,直接返回需要查询的数据,如果需要返回整个数组,那么会将整个数组拷贝一份,再返回,保证内部array在任何情况下都是只读的。
因为上述读写特性,如果需要频繁对CopyOnWriteArrayList
进行修改,而很少读取的话,那么会严重降低系统性能。
因为没有锁的干预,所以CopyOnWriteArrayLIst
在少量修改,频繁读取的场景下,有很好的并发性能。