并发编程(四)------并发quene
在并发队列上jdk提供了两套实现,一个是以concurrentlinkedqueue为代表的高性能队列,一个是以blockingqueue接口为代表的阻塞队列,无论哪种都继承自queue接口!
concurrentlinkedqueue:
是一个适用于高并发场景下的队列,通过无锁的方式,实现了高并发状态下的高性能,通常concurrentlinkedqueue性能好于blockingqueue。它是一个基于链接节点的*线程安全队列。
该队列的元素遵循先进先出的原则,头是最先加入的,尾是最近加入的,该队列不允许null元素。
concurrentlinkedqueue重要方法:
add() 和 offer() 都是加入元素的方法 (在concurrentlinkedqueue中,这俩个方法没有任何区别)
poll() 和 peek() 都是取头元素节点,区别在于前者会删除元素,后者不会。
blockingqueue:
blockingqueue接口的重要方法
offer(anobject): 表示如果可能的话, 将anobject加到blockingqueue里,即如果blockingqueue可以容纳, 则返回true, 否则返回false.(本方法不阻塞当前执行方法的线程)
offer(e o, long timeout, timeunit unit), 可以设定等待的时间,如果在指定的时间内,还不能往队列中加入blockingqueue,则返回失败。
put(anobject): 把anobject加到blockingqueue里, 如果blockqueue没有空间, 则调用此方法的线程被阻断直到blockingqueue里面有空间再继续.
poll(long timeout, timeunit unit):从blockingqueue取出一个队首的对象,如果在指定时间内,队列一旦有数据可取,则立即返回队列中的数据。否则知道时间超时还没有数据可取,返回失败。
take(): 取走blockingqueue里排在首位的对象,若blockingqueue为空,阻断进入等待状态直到blockingqueue有新的数据被加入;
drainto(): 一次性从blockingqueue获取所有可用的数据对象(还可以指定获取数据的个数),通过该方法,可以提升获取数据效率;不需要多次分批加锁或释放锁。
上一篇: mysql-8.0.15允许外网访问