WEB开发网
开发学院软件开发Java 多线程设计模式 -- suspension 阅读

多线程设计模式 -- suspension

 2009-09-17 00:00:00 来源:WEB开发网   
核心提示: BlockingQueue 是一种特殊的Queue,若BlockingQueue 是空的,多线程设计模式 -- suspension(3),从 BlockingQueue 取东西的操作将会被阻断进入等待状态直到BlocingkQueue 进 了新货才会被唤醒,同样,它们背后所用的数据结构不一样,

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。

上一页  1 2 3 4  下一页

Tags:线程 设计模式 suspension

编辑录入:爽爽 [复制链接] [打 印]
赞助商链接