Java线程:堵塞队列与堵塞栈
来源:互联网 发布:粒子群算法的具体应用 编辑:程序博客网 时间:2024/06/02 17:47
一、堵塞队列View CodeView CodeView CodeView Code
Java定义了堵塞队列的接口java.util.concurrent.BlockingQueue,堵塞队列是一个指定长度的队列,当试图向队列中添加元素而队列已满,或者是想从队列移出元素而队列为空的时候,堵塞队列导致线程堵塞。
在协调多个线程之间的合作时,堵塞队列是一个有用的工具。
堵塞队列的方法分为三类,取决于当队列满或空时它们的相应方式。
1、如果将队列当作线程管理工具使用,用到put()(添加一个元素)和take()(移出并返回头元素)方法。
2、当试图向满的队列中添加或从从空的队列中移出元素时,用到add()、remove()(移出并返回头元素)、element()(返回队列的头元素)。
3、在一个线程中,队列会在任何时候空或满时,用offer()(添加一个元素并返回true)、poll()(移出并返回队列的头元素)、peek()(返回队列的头元素)替代。这些方法如果不能完成任务,不会抛出异常,只会给出一个错误。
简单的例子:
QueueTest.java
1 package Thread; 2 3 import java.util.concurrent.ArrayBlockingQueue; 4 import java.util.concurrent.BlockingQueue; 5 6 public class QueueTest { 7 public static void main(String[] args)throws InterruptedException{ 8 BlockingQueue bqueue=new ArrayBlockingQueue(20); 9 for (int i=0;i<30;i++){10 bqueue.put(i);11 System.out.println("向堵塞队列中添加了元素:"+i);12 }13 System.out.println("程序运行结束,即将退出---");14 }15 }
结果为:
1 向堵塞队列中添加了元素:0 2 向堵塞队列中添加了元素:1 3 向堵塞队列中添加了元素:2 4 向堵塞队列中添加了元素:3 5 向堵塞队列中添加了元素:4 6 向堵塞队列中添加了元素:5 7 向堵塞队列中添加了元素:6 8 向堵塞队列中添加了元素:7 9 向堵塞队列中添加了元素:810 向堵塞队列中添加了元素:911 向堵塞队列中添加了元素:1012 向堵塞队列中添加了元素:1113 向堵塞队列中添加了元素:1214 向堵塞队列中添加了元素:1315 向堵塞队列中添加了元素:1416 向堵塞队列中添加了元素:1517 向堵塞队列中添加了元素:1618 向堵塞队列中添加了元素:1719 向堵塞队列中添加了元素:1820 向堵塞队列中添加了元素:19
二、栈
对于堵塞栈,与堵塞队列相似,不同点是后入先出的结构,每次操作的都是栈顶,而队列是先进先出的结构,每次操作的对列头。堵塞栈定义了新街口java.util.concurrentBlockingDeque。例子:
DequeTest.java
1 package Thread; 2 import java.util.concurrent.BlockingDeque; 3 import java.util.concurrent.LinkedBlockingDeque; 4 public class QueueTest { 5 public static void main(String[] args)throws InterruptedException{ 6 BlockingDeque bqueue=new LinkedBlockingDeque(20); 7 for (int i=0;i<30;i++){ 8 bqueue.put(i); 9 System.out.println("向堵塞队列中添加了元素:"+i);10 }11 System.out.println("程序运行结束,即将退出---");12 }13 }
结果为:
1 向堵塞栈中添加了元素:0 2 向堵塞栈中添加了元素:1 3 向堵塞栈中添加了元素:2 4 向堵塞栈中添加了元素:3 5 向堵塞栈中添加了元素:4 6 向堵塞栈中添加了元素:5 7 向堵塞栈中添加了元素:6 8 向堵塞栈中添加了元素:7 9 向堵塞栈中添加了元素:810 向堵塞栈中添加了元素:911 向堵塞栈中添加了元素:1012 向堵塞栈中添加了元素:1113 向堵塞栈中添加了元素:1214 向堵塞栈中添加了元素:1315 向堵塞栈中添加了元素:1416 向堵塞栈中添加了元素:1517 向堵塞栈中添加了元素:1618 向堵塞栈中添加了元素:1719 向堵塞栈中添加了元素:1820 向堵塞栈中添加了元素:19
阅读全文
0 0
- Java线程:堵塞队列与堵塞栈
- Java高级编程:堵塞队列
- 线程堵塞
- Java线程为何会堵塞?
- Java新特性之-堵塞的队列和栈
- weblogic 下面java 线程的堵塞
- Java中的线程状态之堵塞
- 堵塞队列--BlockingQueue
- rabbitmq 队列堵塞
- Messgaebox线程堵塞
- 记一次线程堵塞
- UI线程堵塞
- 线程堵塞概念
- 堵塞与非堵塞IO模式详解
- 可阻塞队列 synchronized和wait/notify 线程堵塞锁
- vmstat 查看堵塞的队列
- Date().getTime()线程堵塞问题
- delphi假死线程堵塞解决办法
- try{}catch(Exception e){}异常处理
- Stanford CoreNLP学习日记2
- “SIM卡状态”中的dBm和状态栏的信号格数是对应的吗?
- Java线程:锁
- lnmp环境的使用
- Java线程:堵塞队列与堵塞栈
- Hdu 6069
- pick定理
- JNI 总结
- Java线程:条件变量、原子量、线程池等
- 事务的四种隔离级别和七种传播机制
- 栈->一般算术表达式转换成后缀式
- Java线程:线程安全类和Callable与Future(有返回值的线程)
- HDU-6069 Counting Divisors