博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
BlockingQueue小谈
阅读量:4230 次
发布时间:2019-05-26

本文共 2274 字,大约阅读时间需要 7 分钟。

方法:

boolean ( e)
将指定的元素插入到此队列中,如果可以立即执行此操作而不违反容量限制,
true在成功后返回
IllegalStateException如果当前没有可用空间,则抛出IllegalStateException。
boolean ( o)
如果此队列包含指定的元素,则返回
true
int (<? super > c)
从该队列中删除所有可用的元素,并将它们添加到给定的集合中。
int (<? super > c, int maxElements)
最多从该队列中删除给定数量的可用元素,并将它们添加到给定的集合中。
boolean ( e)
将指定的元素插入到此队列中,如果可以立即执行此操作,而不会违反容量限制,
true在成功时
false如果当前没有可用空间,则返回false。
boolean ( e, long timeout,  unit)
将指定的元素插入到此队列中,等待指定的等待时间(如有必要)才能使空间变得可用。
(long timeout,  unit)
检索并删除此队列的头,等待指定的等待时间(如有必要)使元素变为可用。
void ( e)
将指定的元素插入到此队列中,等待空格可用。
int ()
返回该队列最好可以(在没有存储器或资源约束)接受而不会阻塞,或附加的元素的数量
Integer.MAX_VALUE如果没有固有的限制。
boolean ( o)
从该队列中删除指定元素的单个实例(如果存在)。
()
检索并删除此队列的头,如有必要,等待元素可用。
BlockingQueue接口多用在多线程生产者-消费者问题中,在队列中没有元素时,可以进入阻塞状态,等待队列中有可用元素。

示例:

/** * 生产者 */public class Producer implements Runnable{    private final BlockingQueue queue;    private int count=0;    public Producer(BlockingQueue q){        queue=q;    }    @Override    public void run() {        try {            while(!Thread.interrupted()){                queue.put(produce());            }        } catch (InterruptedException e) {        }    }    Object produce(){        count++;        return "第"+count+"个任务";    }}
/** * 消费者 */public class Consumer implements Runnable{    private final BlockingQueue queue;    public Consumer(BlockingQueue q){        queue=q;    }    @Override    public void run() {        try {            while(true){                consume(queue.take());            }        } catch (InterruptedException e) {        }    }    public void consume(Object x){        System.out.println(x);    }}
public class Main {    public static void main(String[] args){        BlockingQueue queue=new ArrayBlockingQueue(10);        Producer pro=new Producer(queue);        Consumer con=new Consumer(queue);        //开始生产        Thread a=new Thread(pro);        a.start();        //开始消费        new Thread(con).start();        try {            TimeUnit.MILLISECONDS.sleep(1);        } catch (InterruptedException e) {            e.printStackTrace();        }        a.interrupt();    }}
第1个任务
第2个任务
第3个任务
第4个任务
第5个任务
第6个任务
第7个任务
第8个任务
第9个任务
第10个任务
第11个任务
第12个任务
第13个任务
第14个任务
第15个任务
第16个任务
第17个任务
第18个任务
第19个任务
第20个任务
第21个任务
第22个任务
第23个任务
第24个任务
第25个任务
第26个任务
第27个任务
第28个任务
第29个任务
第30个任务
第31个任务
第32个任务
第33个任务

转载地址:http://gajqi.baihongyu.com/

你可能感兴趣的文章
Tomcat,varnish
查看>>
SVN, 制作RPM包
查看>>
HTML 标签说明
查看>>
CSS 基本语法
查看>>
10.shell基础
查看>>
加密与解密、抓包扫描
查看>>
16.一级目录、历史命令,du,date,zip,快捷方式
查看>>
MySQL的基本管理
查看>>
MySQL 表结构与键值
查看>>
MySQL存储引擎,表记录管理
查看>>
Mysql多表查询语句,授权用户与密码更改
查看>>
MySQL 备份与恢复
查看>>
采用IC传感器的相对湿度测量
查看>>
皮带传动实验
查看>>
微软的人才观
查看>>
Blizzard的MPQ文件格式搜索算法
查看>>
你的变量究竟存储在什么地方?
查看>>
s3c2410 中断异常处理(转)
查看>>
对张孝祥C语言试题其中一题的探讨 (转载)
查看>>
一些好的网站
查看>>