package com.pzoom.test.blockingQueue;
import java.util.concurrent.ArrayBlockingQueue;
import java.util.concurrent.BlockingQueue;
import java.util.concurrent.ExecutorService;
import java.util.concurrent.Executors;
/**
* Created with IntelliJ IDEA.
* User: Administrator
* Date: 13-2-22
* Time: 下午3:21
* 修改描述
*/
public class BlockingQueueTest {
public static class Basket {
BlockingQueue<String> basket = new ArrayBlockingQueue<String>(2);
//生产苹果
public void product() throws InterruptedException {
basket.put("An apple");
}
public String consume() throws InterruptedException {
return basket.take();
}
}
public static void testBasket(){
final Basket basket = new Basket();//建立一个装苹果的篮子
class Producer implements Runnable {
@Override
public void run() {
try {
while(true) {
//生产苹果
System.out.println("..................生产者准备生产苹果: " + System.currentTimeMillis());
basket.product();
// System.out.println("生产者生产苹果完毕: " + System.currentTimeMillis());
//休眠300ms
Thread.sleep(300);
}
} catch (InterruptedException e1){
e1.printStackTrace();
}
}
}
class Cousumer implements Runnable {
@Override
public void run() {
try {
while(true){
//消费苹果
System.out.println("*******************消费者准备消费苹果: " + System.currentTimeMillis());
basket.consume();
// System.out.println("消费者消费苹果完毕: " + System.currentTimeMillis());
//休眠1000ms
Thread.sleep(1000);
}
} catch (InterruptedException e2) {
}
}
}
ExecutorService service = Executors.newCachedThreadPool();
Producer producer = new Producer();
Cousumer cousumer = new Cousumer();
service.submit(producer);
service.submit(cousumer);
try{
Thread.sleep(50000);
}catch(InterruptedException ex){
}
service.shutdownNow();
}
public static void main(String[] args){
BlockingQueueTest.testBasket();
}
}
分享到:
相关推荐
Java中的阻塞队列BlockingQueue是一种并发编程中常用的工具,它实现了线程间的同步和通信。阻塞队列的核心特性在于当队列为空时,尝试获取元素的线程会被阻塞,直到其他线程添加元素;当队列满时,尝试添加元素的...
在Java编程中,`BlockingQueue`(阻塞队列)是一种重要的并发工具,它结合了队列的数据结构和线程同步机制。`BlockingQueue`接口位于`java.util.concurrent`包中,提供了线程安全的数据结构,可以用于实现生产者-...
这些类都实现了`java.util.concurrent.BlockingQueue`接口,该接口定义了`put`、`take`、`offer`、`poll`等方法,用于在队列中添加、移除或检查元素,并且这些操作在队列满或空时会阻塞相应的线程。 在提供的代码...
Java阻塞队列实现原理及实例解析 Java阻塞队列是一种特殊的队列,它能够在队列为空或满时阻塞线程,使得线程之间能够更好地协作和通信。阻塞队列的实现原理是基于锁机制和条件变量机制的,通过wait和notify方法来...
通过队列工厂,可以在运行时动态选择不同类型的队列,比如阻塞队列(`BlockingQueue`)或并发队列(`ConcurrentLinkedQueue`)。 例如,可以创建一个`QueueFactory`类,包含一个`createQueue()`方法,该方法根据...
在Spring Boot中,我们可以通过配置bean来创建和管理BlockingQueue实例。通常,我们会选择实现BlockingQueue的类,如ArrayBlockingQueue、LinkedBlockingQueue或PriorityBlockingQueue,根据实际需求选择合适的实现...
在Java编程中,阻塞队列(BlockingQueue)是一种重要的并发工具,用于在多个线程之间传递和协调任务。在上述实例中,阻塞队列被用来控制线程集,以便在目录及其子目录中搜索包含特定关键字的文件。这个程序涉及到几...
1. 如何创建不同类型的BlockingQueue实例。 2. 生产者线程和消费者线程如何使用`put()`和`take()`方法交互。 3. 如何处理队列满或空的异常情况,例如使用`offer()`和`poll()`方法的超时版本。 4. 如何控制并发线程...
实现阻塞接口的Queue包括java.util.concurrent中的BlockingQueue接口和五个阻塞队列类。BlockingQueue接口是一个带有一点扭曲的FIFO数据结构。不是立即从队列中添加或者删除元素,线程执行操作阻塞,直到有空间或者...
2. **阻塞队列**:利用`BlockingQueue`接口实现的队列,如`ArrayBlockingQueue`、`LinkedBlockingQueue`等,可以确保当队列满时,新添加的任务会阻塞等待,直到有空闲空间为止;同样,当队列为空时,从队列中取出...
Java中的阻塞队列(BlockingQueue)是一种线程安全的数据结构,它在多线程环境下的生产者消费者问题中扮演着关键角色。阻塞队列的主要特点是当队列满时,生产者线程会等待,直到队列有空位;同样,当队列为空时,...
7. LinkedBlockingDeque:基于链表的双向阻塞队列,既可以作为队列也可以作为栈使用。 在生产者-消费者场景下,BlockingQueue 能够确保生产者线程在队列满时不会过度生产,而消费者线程在队列为空时也不会过度消耗...
Java中的`BlockingQueue`是一个非常重要的并发工具类,它提供了线程安全的队列操作,主要用于生产者-消费者模式。这个接口定义了一种在多线程环境下高效、可靠的队列操作,它允许线程在队列为空时等待新元素的到来,...
Java 阻塞队列(BlockingQueue)是Java并发编程中的一个重要组件,它在多线程环境下提供了一种高效、安全的数据共享机制。在Java的`java.util.concurrent`包中,阻塞队列是一个线程安全的接口,它在生产者-消费者...
7. **BlockingQueue**:阻塞队列是一种特殊的队列,当队列为空时,取元素的线程会被阻塞;当队列满时,放入元素的线程也会被阻塞。Java的并发包提供了多种实现,如ArrayBlockingQueue、LinkedBlockingQueue等,它们...
3. **阻塞队列(BlockingQueue)**:`java.util.concurrent`包下的`BlockingQueue`接口扩展了Queue接口,并添加了线程安全的阻塞操作,如`put(E e)`、`take()`等。这些方法会在队列满时阻塞生产者,空时阻塞消费者,...
标题 "2011.08.30(2)——— java BlockingQueue ExecutorService" 涉及到Java并发编程中的两个核心组件:BlockingQueue(阻塞队列)和ExecutorService。这篇博客可能深入探讨了如何使用这两个工具来优化多线程环境...
Java提供了BlockingQueue接口,实现了线程安全的队列,可以高效地在生产者和消费者之间传递数据。此外,还可以利用并发工具类如Semaphore(信号量)来控制对有限资源的访问,或者使用CountDownLatch来协调多个线程的...
它具有以下特性:当队列为空时,从队列中获取元素的操作会被阻塞;同样地,当队列满时,向队列中添加元素的操作也会被阻塞。这种特性使得`BlockingQueue`非常适合用于生产者-消费者模式的场景。 #### 2. ...
Java编程语言在处理并发任务和时间调度方面提供了丰富的工具,如`java.util.Timer`、线程池和队列。在“java定时器+多线程(池)+java队列Demo”这个项目中,我们将深入探讨这三个核心概念。 1. **Java定时器(java....