`
刘小小尘
  • 浏览: 67447 次
  • 性别: Icon_minigender_1
  • 来自: 上海
社区版块
存档分类
最新评论

java阻塞队列BlockingQueue使用实例

 
阅读更多
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是一种并发编程中常用的工具,它实现了线程间的同步和通信。阻塞队列的核心特性在于当队列为空时,尝试获取元素的线程会被阻塞,直到其他线程添加元素;当队列满时,尝试添加元素的...

    java中线程队列BlockingQueue的用法

    在Java编程中,`BlockingQueue`(阻塞队列)是一种重要的并发工具,它结合了队列的数据结构和线程同步机制。`BlockingQueue`接口位于`java.util.concurrent`包中,提供了线程安全的数据结构,可以用于实现生产者-...

    java阻塞队列实现原理及实例解析.docx

    这些类都实现了`java.util.concurrent.BlockingQueue`接口,该接口定义了`put`、`take`、`offer`、`poll`等方法,用于在队列中添加、移除或检查元素,并且这些操作在队列满或空时会阻塞相应的线程。 在提供的代码...

    java阻塞队列实现原理及实例解析

    Java阻塞队列实现原理及实例解析 Java阻塞队列是一种特殊的队列,它能够在队列为空或满时阻塞线程,使得线程之间能够更好地协作和通信。阻塞队列的实现原理是基于锁机制和条件变量机制的,通过wait和notify方法来...

    java 多线程 队列工厂

    通过队列工厂,可以在运行时动态选择不同类型的队列,比如阻塞队列(`BlockingQueue`)或并发队列(`ConcurrentLinkedQueue`)。 例如,可以创建一个`QueueFactory`类,包含一个`createQueue()`方法,该方法根据...

    spring-blockingqueue:用Spring Boot阻止队列

    在Spring Boot中,我们可以通过配置bean来创建和管理BlockingQueue实例。通常,我们会选择实现BlockingQueue的类,如ArrayBlockingQueue、LinkedBlockingQueue或PriorityBlockingQueue,根据实际需求选择合适的实现...

    Java中使用阻塞队列控制线程集实例

    在Java编程中,阻塞队列(BlockingQueue)是一种重要的并发工具,用于在多个线程之间传递和协调任务。在上述实例中,阻塞队列被用来控制线程集,以便在目录及其子目录中搜索包含特定关键字的文件。这个程序涉及到几...

    BlockingQueue的使用

    1. 如何创建不同类型的BlockingQueue实例。 2. 生产者线程和消费者线程如何使用`put()`和`take()`方法交互。 3. 如何处理队列满或空的异常情况,例如使用`offer()`和`poll()`方法的超时版本。 4. 如何控制并发线程...

    java队列之queue用法实例分析

    实现阻塞接口的Queue包括java.util.concurrent中的BlockingQueue接口和五个阻塞队列类。BlockingQueue接口是一个带有一点扭曲的FIFO数据结构。不是立即从队列中添加或者删除元素,线程执行操作阻塞,直到有空间或者...

    java多线程加队列上传文件_后台处理

    2. **阻塞队列**:利用`BlockingQueue`接口实现的队列,如`ArrayBlockingQueue`、`LinkedBlockingQueue`等,可以确保当队列满时,新添加的任务会阻塞等待,直到有空闲空间为止;同样,当队列为空时,从队列中取出...

    Java使用阻塞队列控制线程通信的方法实例详解

    Java中的阻塞队列(BlockingQueue)是一种线程安全的数据结构,它在多线程环境下的生产者消费者问题中扮演着关键角色。阻塞队列的主要特点是当队列满时,生产者线程会等待,直到队列有空位;同样,当队列为空时,...

    Java并发编程--BlockingQueue.docx

    7. LinkedBlockingDeque:基于链表的双向阻塞队列,既可以作为队列也可以作为栈使用。 在生产者-消费者场景下,BlockingQueue 能够确保生产者线程在队列满时不会过度生产,而消费者线程在队列为空时也不会过度消耗...

    java线程并发blockingqueue类使用示例

    Java中的`BlockingQueue`是一个非常重要的并发工具类,它提供了线程安全的队列操作,主要用于生产者-消费者模式。这个接口定义了一种在多线程环境下高效、可靠的队列操作,它允许线程在队列为空时等待新元素的到来,...

    Java 阻塞队列详解及简单使用

    Java 阻塞队列(BlockingQueue)是Java并发编程中的一个重要组件,它在多线程环境下提供了一种高效、安全的数据共享机制。在Java的`java.util.concurrent`包中,阻塞队列是一个线程安全的接口,它在生产者-消费者...

    JAVA100例之实例64 JAVA线程间通讯

    7. **BlockingQueue**:阻塞队列是一种特殊的队列,当队列为空时,取元素的线程会被阻塞;当队列满时,放入元素的线程也会被阻塞。Java的并发包提供了多种实现,如ArrayBlockingQueue、LinkedBlockingQueue等,它们...

    Java 实例 - 队列(Queue)用法源代码-详细教程.zip

    3. **阻塞队列(BlockingQueue)**:`java.util.concurrent`包下的`BlockingQueue`接口扩展了Queue接口,并添加了线程安全的阻塞操作,如`put(E e)`、`take()`等。这些方法会在队列满时阻塞生产者,空时阻塞消费者,...

    2011.08.30(2)——— java BlockingQueue ExecutorService

    标题 "2011.08.30(2)——— java BlockingQueue ExecutorService" 涉及到Java并发编程中的两个核心组件:BlockingQueue(阻塞队列)和ExecutorService。这篇博客可能深入探讨了如何使用这两个工具来优化多线程环境...

    Java多线程编程实例

    Java提供了BlockingQueue接口,实现了线程安全的队列,可以高效地在生产者和消费者之间传递数据。此外,还可以利用并发工具类如Semaphore(信号量)来控制对有限资源的访问,或者使用CountDownLatch来协调多个线程的...

    线程----BlockingQueue

    它具有以下特性:当队列为空时,从队列中获取元素的操作会被阻塞;同样地,当队列满时,向队列中添加元素的操作也会被阻塞。这种特性使得`BlockingQueue`非常适合用于生产者-消费者模式的场景。 #### 2. ...

    java定时器+多线程(池)+java队列Demo

    Java编程语言在处理并发任务和时间调度方面提供了丰富的工具,如`java.util.Timer`、线程池和队列。在“java定时器+多线程(池)+java队列Demo”这个项目中,我们将深入探讨这三个核心概念。 1. **Java定时器(java....

Global site tag (gtag.js) - Google Analytics