• Welcome to the world's largest Chinese hacker forum

    Welcome to the world's largest Chinese hacker forum, our forum registration is open! You can now register for technical communication with us, this is a free and open to the world of the BBS, we founded the purpose for the study of network security, please don't release business of black/grey, or on the BBS posts, to seek help hacker if violations, we will permanently frozen your IP and account, thank you for your cooperation. Hacker attack and defense cracking or network Security

    business please click here: Creation Security  From CNHACKTEAM

Recommended Posts

10.1 Block ingQueue简介

在并发包中,BlockingQueue解决了多线程中如何高效安全地“传输”数据的问题。这些高效且线程安全的队列类为我们快速构建高质量的多线程程序带来了极大的便利。本文详细介绍了BlockingQueue家族的所有成员,包括各自的功能和常见的使用场景。

阻塞队列,顾名思义,首先是一个队列。通过共享队列,数据可以从队列的一端输入,从另一端输出。

顺便说一下,blocking是一个队列,它在数据结构中的作用如下所示:

3na4wrfot5g5157.png

当队列为空时,从队列中获取元素将被阻止。

当队列已满时,从队列添加元素将被阻止。

试图从空队列中获取元素的线程将被阻塞,直到其他线程向空队列中插入新元素。

试图向满队列添加新元素的线程将被阻塞,直到其他线程从队列中移除一个或多个元素或完全清空队列,使队列空闲并在以后添加它们。

在多线程字段:中,所谓阻塞是指线程在某些情况下会被挂起(即阻塞),一旦满足条件,被挂起的线程会被自动唤醒。

为什么需要BlockingQueue?

好处是我们不需要关心什么时候需要阻塞线程,什么时候需要唤醒线程,因为这些都是你做的。

在并发包发布之前,在多线程环境下,我们每个程序员都必须自己控制这些细节,尤其是要兼顾效率和线程安全,这会给我们的程序带来很多复杂性。

h5ft4fec2fu5158.png

包JUC.queue

导入Java . util . concurrent . arrayblockingqueue;

导入Java . util . concurrent . blocking queue;

导入Java . util . concurrent . time unit;

公共类BlockingQueueDemo {

公共静态void main(String[] args)引发InterruptedException {

//创建阻塞队列

BlockingQueueString blocking queue=new ArrayBlockingQueue(3);

//第一组

//system . out . println(blocking queue . add(' a '));

//system . out . println(blocking queue . add(' b '));

//system . out . println(blocking queue . add(' c '));

//返回这个队列的头

//system . out . println(blocking queue . element());

//引发堆栈满异常

//system . out . println(blocking queue . add(' w '));

//system . out . println(blocking queue . remove());

//system . out . println(blocking queue . remove());

//system . out . println(blocking queue . remove());

//不引发元素异常

//system . out . println(blocking queue . remove());

//第二组

//system . out . println(blocking queue . offer(' a '));

//system . out . println(blocking queue . offer(' b '));

//system . out . println(blocking queue . offer(' c '));

//system . out . println(blocking queue . offer(' ww ');

//

//system . out . println(blocking queue . poll());

//system . out . println(blocking queue . poll());

//system . out . println(blocking queue . poll());

//system . out . println(blocking queue . poll());

//第三组

//blocking queue . put(' a ');

//blocking queue . put(' b ');

//blocking queue . put(' c ');

//blocking queue . put(' w ');

//

//system . out . println(blocking queue . take());

//system . out . println(blocking queue . take());

//system . out . println(blocking queue . take());

//system . out . println(blocking queue . take());

//第四组

system . out . println(blocking queue . offer(' a '));

system . out . println(blocking queue . offer(' b '));

system . out . println(blocking queue . offer(' c '));

system . out . println(blocking queue . offer(' w ',3L,时间单位。秒));

}

}

Link to comment
Share on other sites