多线程设计模式 -- suspension
2009-09-17 00:00:00 来源:WEB开发网BlockingQueue 是一种特殊的Queue,若BlockingQueue 是空的,从 BlockingQueue 取东西的操作将会被阻断进入等待状态直到BlocingkQueue 进 了新货才会被唤醒。同样,如果BlockingQueue 是满的任何试图往里存东西的 操作也会被阻断进入等待状态,直到BlockingQueue 里有新的空间才会被唤醒 继续操作。BlockingQueue 提供的方法主要有: add(anObject): 把anObject 加到BlockingQueue 里,如果BlockingQueue 可以容纳返回true,否则抛出IllegalStateException 异常。
offer(anObject):把anObject 加到BlockingQueue 里,如果 BlockingQueue 可以容纳返回true,否则返回false。
put(anObject):把anObject 加到BlockingQueue 里,如果BlockingQueue 没有空间,调用此方法的线程被阻断直到BlockingQueue 里有新的空间再继续。
poll(time):取出BlockingQueue 里排在首位的对象,若不能立即取出可等time 参数规定的时间。取不到时返回null。
take():取出BlockingQueue 里排在首位的对象,若BlockingQueue 为 空,阻断进入等待状态直到BlockingQueue 有新的对象被加入为止。
根据不同的需要 BlockingQueue 有4 种具体实现:
ArrayBlockingQueue:规定大小的BlockingQueue,其构造函数必须带一个int 参数来指明其大小。其所含的对象是以FIFO(先入先出)顺序排序的。
LinkedBlockingQueue:大小不定的BlockingQueue,若其构造函数带一 个规定大小的参数,生成的BlockingQueue 有大小限制,若不带大小参数,所生成的BlockingQueue 的大小由Integer.MAX_VALUE 来决定。其所含的对象是以FIFO(先入先出)顺序排序的。LinkedBlockingQueue 和 ArrayBlockingQueue 比较起来,它们背后所用的数据结构不一样,导致LinkedBlockingQueue 的数据吞吐量要大于ArrayBlockingQueue,但在线程数量很大时其性能的可预见性低于ArrayBlockingQueue。
Tags:线程 设计模式 suspension
编辑录入:爽爽 [复制链接] [打 印]更多精彩
赞助商链接