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`是一个并发容器,它遵循先进先出(FIFO)原则,具有阻塞性质,当队列满时,生产者线程会被阻塞,直到有消费者取走元素;当队列空时,消费者线程会被阻塞,直到生产者放入新的元素。常用实现如`...
Java中的阻塞队列BlockingQueue是一种并发编程中常用的工具,它实现了线程间的同步和通信。阻塞队列的核心特性在于当队列为空时,尝试获取元素的线程会被阻塞,直到其他线程添加元素;当队列满时,尝试添加元素的...
在这个例子中,我们创建了一个固定大小为10的阻塞队列,然后创建了生产者和消费者线程。生产者线程将0到19的数字放入队列,而消费者线程则取出并打印这些数字。当消费者消费完所有元素后,线程池会被关闭,程序结束...
BlockingQueue是Java并发包`java.util.concurrent`中的一个接口,它提供了在队列满时阻塞插入操作和队列空时阻塞删除操作的能力。这种设计模式被称为生产者-消费者模型,它有效地解决了线程间的同步问题,避免了不必...
下面是一个使用`CountDownLatch`实现阻塞队列的例子: ```java public class SimpleBlockQueueWithLatch<T> { private int capacity; private LinkedList<T> queue = new LinkedList(); private final ...
"详解Java阻塞队列(BlockingQueue)的实现原理" Java阻塞队列(BlockingQueue)是Java.util.concurrent包下重要的数据结构,提供了线程安全的队列访问方式。BlockingQueue的实现原理主要是基于四组不同的方法用于...
在这个例子中,生产者线程不断向队列中放入数字,而消费者线程则持续从队列中取出数字,当队列满时,生产者会被阻塞,当队列空时,消费者会被阻塞。这个模型展示了阻塞队列如何有效地协调生产者和消费者的活动。 ...
下面是一个简单的阻塞队列实现例子: ```java public class BlockingQueue { private List queue = new LinkedList(); private int limit = 10; public BlockingQueue(int limit) { this.limit = limit; } ...
`LinkedBlockingQueue` 同样是 `java.util.concurrent` 包下的一个线程安全的阻塞队列实现,它继承自 `AbstractQueue` 并实现了 `BlockingQueue` 接口。`LinkedBlockingQueue` 的特点是可以在队列满时阻塞生产者线程...
在Java编程中,阻塞队列(BlockingQueue)是一种重要的并发工具,用于在多个线程之间传递和协调任务。在上述实例中,阻塞队列被用来控制线程集,以便在目录及其子目录中搜索包含特定关键字的文件。这个程序涉及到几...
在这个例子中,当队列满时,`put`方法将阻塞直到队列中有空间。类似地,当队列为空时,`take`方法会阻塞消费者线程,直到有元素可供消费。 理解并合理利用阻塞队列是Java并发编程的关键,它能有效地提升程序的并发...
在特定场景下,我们可能需要一种能够自动处理队列满或空情况的机制,这就是阻塞队列(BlockingQueue)的作用。阻塞队列在Java中由`java.util.concurrent`包中的`BlockingQueue`接口提供,它解决了在多线程环境下,...
Java 阻塞队列(BlockingQueue)是Java并发编程中的一个重要组件,它在多线程环境下提供了一种高效、安全的数据共享机制。在Java的`java.util.concurrent`包中,阻塞队列是一个线程安全的接口,它在生产者-消费者...
在这个例子中,我们看到如何在Linux环境下使用C++和POSIX线程库(pthread)中的条件变量(condition variables)来实现阻塞队列。 首先,我们需要包含必要的头文件,并定义一个名为`BlockingQueue`的类。这个类包含了...
这个库提供了多种工具类,如BlockingQueue(阻塞队列),它能够很好地实现生产者消费者模型。阻塞队列是一种特殊的队列,当队列为空时,消费者尝试从队列中取元素会被阻塞;当队列满时,生产者尝试向队列中添加元素...
`BlockingQueue`提供了线程安全的队列操作,如添加(put)和移除(take),当队列满时,添加操作会阻塞生产者线程,当队列空时,移除操作会阻塞消费者线程。这样可以防止过度生产和过度消费,实现同步。 下面我们将...
例如,Java的`BlockingQueue`接口就是一个很好的选择,因为它内置了线程安全的机制,可以自动阻塞生产者当队列满时,以及阻塞消费者当队列为空时。 在这个例子中,我们可以创建两个线程,一个作为生产者,另一个...
4. 线程通信:线程间通信用于交换信息,Java中的主要工具有wait()、notify()和notifyAll()方法(需在synchronized块中使用),以及BlockingQueue阻塞队列等。 5. 线程状态:线程有新建、就绪、运行、阻塞和终止五种...
为了解耦生产者和消费者,引入了一个阻塞队列作为缓冲区,它在Java中通常由`BlockingQueue`接口及其实现类如`ArrayBlockingQueue`、`LinkedBlockingQueue`等来实现。 阻塞队列的特点在于,当队列为空时,尝试从队列...
4. **BlockingQueue阻塞队列**:Java的`java.util.concurrent`包提供了`BlockingQueue`接口,它是一种特殊的队列,可以在队列满时阻塞生产者,队列空时阻塞消费者,从而自动实现线程的同步和互斥。`put()`和`take()`...