`
lijunaccp
  • 浏览: 160435 次
  • 性别: Icon_minigender_1
  • 来自: 杭州
社区版块
存档分类
最新评论

BlockingQueue阻塞队列的例子

 
阅读更多
package com.test;

import java.util.Random;
import java.util.concurrent.ArrayBlockingQueue;
import java.util.concurrent.BlockingQueue;
import java.util.concurrent.ExecutorService;
import java.util.concurrent.Executors;

public class BlockingQueueTest
{

	/**
	 * @param args
	 */
	public static void main(String[] args)
	{
		ExecutorService pool = Executors.newCachedThreadPool();

		final BlockingQueue bq = new ArrayBlockingQueue(3);

		for (int i = 0; i < 2; i++)
		{
			pool.execute(new Runnable()
			{
				public void run()
				{
					try
					{
						while (true)
						{
							Thread.sleep(new Random().nextInt(1000));
							System.out.println(Thread.currentThread().getName()
									+ "准备放数据");
							bq.put(1);
							System.out.println(Thread.currentThread().getName()
									+ "已经放完数据,目前队列有"+bq.size()+"个数据");
						}
					}
					catch (InterruptedException e)
					{
						e.printStackTrace();
					}
				}
			});
		}
		
		pool.execute(new Runnable()
		{
			public void run()
			{
				try
				{
					while (true)
					{
						Thread.sleep(100);
						System.out.println(Thread.currentThread().getName()
								+ "准备取数据");
						bq.take();
						System.out.println(Thread.currentThread().getName()
								+ "已经取走数据,目前队列有"+bq.size()+"个数据");
					}
				}
				catch (InterruptedException e)
				{
					e.printStackTrace();
				}
			}
		});
	}

}

分享到:
评论

相关推荐

    BlockingQueue队列自定义超时时间取消线程池任务

    首先,`BlockingQueue`是一个并发容器,它遵循先进先出(FIFO)原则,具有阻塞性质,当队列满时,生产者线程会被阻塞,直到有消费者取走元素;当队列空时,消费者线程会被阻塞,直到生产者放入新的元素。常用实现如`...

    java 中 阻塞队列BlockingQueue详解及实例

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

    java模拟阻塞队列

    在这个例子中,我们创建了一个固定大小为10的阻塞队列,然后创建了生产者和消费者线程。生产者线程将0到19的数字放入队列,而消费者线程则取出并打印这些数字。当消费者消费完所有元素后,线程池会被关闭,程序结束...

    spring-blockingqueue:用Spring Boot阻止队列

    BlockingQueue是Java并发包`java.util.concurrent`中的一个接口,它提供了在队列满时阻塞插入操作和队列空时阻塞删除操作的能力。这种设计模式被称为生产者-消费者模型,它有效地解决了线程间的同步问题,避免了不必...

    Java实现简单的阻塞队列2种方式

    下面是一个使用`CountDownLatch`实现阻塞队列的例子: ```java public class SimpleBlockQueueWithLatch&lt;T&gt; { private int capacity; private LinkedList&lt;T&gt; queue = new LinkedList(); private final ...

    详解Java阻塞队列(BlockingQueue)的实现原理

    "详解Java阻塞队列(BlockingQueue)的实现原理" Java阻塞队列(BlockingQueue)是Java.util.concurrent包下重要的数据结构,提供了线程安全的队列访问方式。BlockingQueue的实现原理主要是基于四组不同的方法用于...

    Java并发编程(21)并发新特性-阻塞队列和阻塞栈(含代

    在这个例子中,生产者线程不断向队列中放入数字,而消费者线程则持续从队列中取出数字,当队列满时,生产者会被阻塞,当队列空时,消费者会被阻塞。这个模型展示了阻塞队列如何有效地协调生产者和消费者的活动。 ...

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

    下面是一个简单的阻塞队列实现例子: ```java public class BlockingQueue { private List queue = new LinkedList(); private int limit = 10; public BlockingQueue(int limit) { this.limit = limit; } ...

    并发队列ConcurrentLinkedQueue和阻塞队列LinkedBlockingQueue用法

    `LinkedBlockingQueue` 同样是 `java.util.concurrent` 包下的一个线程安全的阻塞队列实现,它继承自 `AbstractQueue` 并实现了 `BlockingQueue` 接口。`LinkedBlockingQueue` 的特点是可以在队列满时阻塞生产者线程...

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

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

    Java并发编程之阻塞队列详解

    在这个例子中,当队列满时,`put`方法将阻塞直到队列中有空间。类似地,当队列为空时,`take`方法会阻塞消费者线程,直到有元素可供消费。 理解并合理利用阻塞队列是Java并发编程的关键,它能有效地提升程序的并发...

    队列分享-易群1

    在特定场景下,我们可能需要一种能够自动处理队列满或空情况的机制,这就是阻塞队列(BlockingQueue)的作用。阻塞队列在Java中由`java.util.concurrent`包中的`BlockingQueue`接口提供,它解决了在多线程环境下,...

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

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

    Linux C++ 使用condition实现阻塞队列的方法

    在这个例子中,我们看到如何在Linux环境下使用C++和POSIX线程库(pthread)中的条件变量(condition variables)来实现阻塞队列。 首先,我们需要包含必要的头文件,并定义一个名为`BlockingQueue`的类。这个类包含了...

    生产者消费者问题

    这个库提供了多种工具类,如BlockingQueue(阻塞队列),它能够很好地实现生产者消费者模型。阻塞队列是一种特殊的队列,当队列为空时,消费者尝试从队列中取元素会被阻塞;当队列满时,生产者尝试向队列中添加元素...

    java多线程例子-生产者消费者

    `BlockingQueue`提供了线程安全的队列操作,如添加(put)和移除(take),当队列满时,添加操作会阻塞生产者线程,当队列空时,移除操作会阻塞消费者线程。这样可以防止过度生产和过度消费,实现同步。 下面我们将...

    模仿线程"生产者与消费者"的例子

    例如,Java的`BlockingQueue`接口就是一个很好的选择,因为它内置了线程安全的机制,可以自动阻塞生产者当队列满时,以及阻塞消费者当队列为空时。 在这个例子中,我们可以创建两个线程,一个作为生产者,另一个...

    多线程的例子

    4. 线程通信:线程间通信用于交换信息,Java中的主要工具有wait()、notify()和notifyAll()方法(需在synchronized块中使用),以及BlockingQueue阻塞队列等。 5. 线程状态:线程有新建、就绪、运行、阻塞和终止五种...

    JAVA多线程之生产者消费者模型.docx

    为了解耦生产者和消费者,引入了一个阻塞队列作为缓冲区,它在Java中通常由`BlockingQueue`接口及其实现类如`ArrayBlockingQueue`、`LinkedBlockingQueue`等来实现。 阻塞队列的特点在于,当队列为空时,尝试从队列...

    JAVA实现线程间同步与互斥生产者消费者问题

    4. **BlockingQueue阻塞队列**:Java的`java.util.concurrent`包提供了`BlockingQueue`接口,它是一种特殊的队列,可以在队列满时阻塞生产者,队列空时阻塞消费者,从而自动实现线程的同步和互斥。`put()`和`take()`...

Global site tag (gtag.js) - Google Analytics