Queue队列遵循了先进先出的原则
BlockingQueue继承了Queue
可以通过IDEA的UML图看出彼此的关系:
BlockingQueue :阻塞队列
向队列尾添加元素(put()方法)时,若队列已经塞满,则当前线程会被阻塞,直到队列中元素被消费,出现空余位置,则线程继续工作
向队列头取元素(take()方法)时,若队列为空,则当前线程会被阻塞,直到队列中出现新的元素,当前线程才会继续工作。
测试:
创建测试类:Test
创建Test私有属性 BlockingQueue
构造方法创建实例:
生产数据:
public void generate() throws InterruptedException {
int i = 0;
while (true) {
i++;
queue.put("asdasd"+i);
System.out.println();
System.out.println("生产数据:asdasd"+i);
}
}
消费数据:
public void customer() throws InterruptedException {
while (true) {
Thread.sleep(3000);
System.out.println("消费数据:"+queue.take());
}
}
Main方法中创建两个线程,一个线程负责生成数据,一个线程负责消费数据:
public static void main(String[] args) throws InterruptedException {
Test test = new Test();
new Thread(()->{
try {
test.generate();
} catch (InterruptedException e) {
e.printStackTrace();
}
}).start();
new Thread(()->{
try {
test.customer();
} catch (InterruptedException e) {
e.printStackTrace();
}
}).start();
}
执行结果:
可以看出来,先生成的数据,先消费