两句话笔记--架构学习之一:并发基础课程(1)

1.ConcurrentModificationException
出现这种的原因是遍历(iterator或增强循环)同步类容器时,同时对容器内的元素进行修改造成的,可以用普通for循环解决。因为普通for循环是一个线程操作。
2.普通容器想变成线程安全的容器,那么用Collections.synchronizedCollection方法就可以实现.
3.concurrentHashMap分为16个segment片,计算size用的volitile修饰,而取值 ,和赋值是,在每一个segment内加入锁,在segment之间不加锁。
4.copyonwrite,每次进行写操作的时候,都要在原线程的数据中复制一次。操作完成之后,都会把新修改的数据再赋值回去,不适合做list元素比较多的场景。同时修改时,有锁。
5.各种队列,阻塞队列,非阻塞队列和×××队列,有界队列。×××队列,add和offer是一样的作用。阻塞队列,add添加不进去报异常,offer添加不进去返回false,或者可以设定等待时间。put方法就阻塞再那里。poll方法从对手有值则返回,物质则返回失败。take方法,无值时,阻塞再那里直到有值。drainTo,提升效率的一次性获取多个元素。
6.concurrentLinkQueue基于无阻塞×××队列 ,poll,取值移除,peek,取值不移除。
7.ArrayBlockingQueue基于阻塞有界队列。
8.linkedblockingqueue阻塞×××队列。
9.SynchronousQueue不能城防任何元素的阻塞队列。
10.ProrityBlockingQueue,添加的时候有一个二分算法,取值的时候,有一个比较算法,取出优先级最高的。
11.DelayQueue有getDelay方法和compareTo方法,用于延迟时间的设定和元素之间的比较排序

猜你喜欢

转载自blog.51cto.com/12452611/2152122