`
lvwenwen
  • 浏览: 953983 次
  • 性别: Icon_minigender_1
  • 来自: 魔都
社区版块
存档分类
最新评论

ArrayBlockingQueue(阻塞队列)

阅读更多
package cn.itcast.day3.thread;

import java.util.Collections;
import java.util.concurrent.ArrayBlockingQueue;
import java.util.concurrent.BlockingQueue;
import java.util.concurrent.atomic.AtomicInteger;

public class BlockingQueueCommunication {

	/**
	 * @param args
	 */
	public static void main(String[] args) {
		
		final Business business = new Business();
		new Thread(
				new Runnable() {
					
					@Override
					public void run() {
					
						for(int i=1;i<=50;i++){
							business.sub(i);
						}
						
					}
				}
		).start();
		
		for(int i=1;i<=50;i++){
			business.main(i);
		}
		
	}

	 static class Business {
		 
		 
		  BlockingQueue<Integer> queue1 = new ArrayBlockingQueue<Integer>(1);
		  BlockingQueue<Integer> queue2 = new ArrayBlockingQueue<Integer>(1);
		  
		  {
			  Collections.synchronizedMap(null);
			  try {
				  System.out.println("xxxxxdfsdsafdsa");
				queue2.put(1);
			} catch (InterruptedException e) {
				// TODO Auto-generated catch block
				e.printStackTrace();
			}
		  }
		  
		  public  void sub(int i){
			  	try {
					queue1.put(1);
				} catch (InterruptedException e) {
					// TODO Auto-generated catch block
					e.printStackTrace();
				}
				for(int j=1;j<=10;j++){
					System.out.println("sub thread sequece of " + j + ",loop of " + i);
				}
				try {
					queue2.take();
				} catch (InterruptedException e) {
					// TODO Auto-generated catch block
					e.printStackTrace();
				}
		  }
		  
		  public  void main(int i){
			  	try {
					queue2.put(1);
				} catch (InterruptedException e1) {
					// TODO Auto-generated catch block
					e1.printStackTrace();
				}
				for(int j=1;j<=100;j++){
					System.out.println("main thread sequece of " + j + ",loop of " + i);
				}
				try {
					queue1.take();
				} catch (InterruptedException e) {
					// TODO Auto-generated catch block
					e.printStackTrace();
				}
		  }
	  }

} 

 ArrayBlockingQueue(阻塞队列)只有put方法和take方法才具有阻塞功能

 

分享到:
评论

相关推荐

    支持多线程和泛型的阻塞队列

    在Java中,`java.util.concurrent`包提供了多种阻塞队列实现,如`ArrayBlockingQueue`, `LinkedBlockingQueue`等。它们都实现了`BlockingQueue`接口,提供了一套线程安全的方法来添加和移除元素,如`put()`, `take()...

    并发-线程池和阻塞队列.pdf

    Java中的ArrayBlockingQueue和LinkedBlockingQueue都是典型的阻塞队列实现。 阻塞队列为线程间通信提供了便捷的机制,可以用来协调多个线程的运行,防止多线程直接访问共享资源导致的并发问题。例如,生产者-消费者...

    阻塞队列阻塞队列阻塞队列

    ArrayBlockingQueue是一个基于固定数组实现的阻塞队列。它的容量在创建时就需要指定,并且不可变。队列内部采用双指针机制,一个指向头部,一个指向尾部,进行元素的入队和出队操作。ArrayBlockingQueue支持公平和非...

    14-阻塞队列BlockingQueue实战及其原理分析二.pdf

    1. ArrayBlockingQueue:使用数组作为底层数据结构的阻塞队列。 2. LinkedBlockingQueue:使用链表作为底层数据结构的阻塞队列。 3. SynchronousQueue:一个不存储元素的阻塞队列,生产者和消费者需要同时存在。 4. ...

    并发-线程池和阻塞队列

    常见的阻塞队列实现包括ArrayBlockingQueue、LinkedBlockingQueue、PriorityBlockingQueue等。阻塞队列常被用作线程池的工作队列,连接生产者(添加任务的线程)和消费者(执行任务的线程),实现任务的异步处理。 ...

    java模拟阻塞队列

    Java中的阻塞队列实现主要依赖于`java.util.concurrent`包下的几个类,如`BlockingQueue`接口、`ArrayBlockingQueue`、`LinkedBlockingQueue`等。`BlockingQueue`接口定义了一组操作,如`put`、`take`、`offer`等,...

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

    然而,实际生产环境中,Java提供了更高级的并发工具,如`BlockingQueue`接口和其实现类,如`ArrayBlockingQueue`、`LinkedBlockingQueue`等,它们提供了更完善的线程安全和阻塞操作,是更为推荐的选择。

    阻塞队列(Blocking Queue)是一个支持两个附加操作的队列.txt

    1. ArrayBlockingQueue:基于数组结构的有界阻塞队列。它有一个构造参数来定义队列的容量,并使用一个锁来实现线程间的同步。 2. LinkedBlockingQueue:基于链表结构的可选界阻塞队列。默认情况下是无界的,也可以...

    10、阻塞队列BlockingQueue实战及其原理分析.pdf

    1. **ArrayBlockingQueue**:基于数组结构实现的有界阻塞队列,初始化时需指定容量大小。 2. **LinkedBlockingQueue**:基于链表结构实现的无界阻塞队列,也可通过构造函数指定容量大小变为有界队列。 3. **...

    10、阻塞队列BlockingQueue实战及其原理分析

    在Java的`java.util.concurrent`包中,提供了多种实现阻塞队列的类,如`ArrayBlockingQueue`, `LinkedBlockingQueue`, `PriorityBlockingQueue`等。 阻塞队列的核心特性在于其“阻塞”行为:当队列为空时,尝试获取...

    java学习(基于Java阻塞队列的搜索实例).pdf

    本实例中使用了`ArrayBlockingQueue`,这是最常用的阻塞队列实现之一,它是一个有界队列,能够按FIFO(先进先出)的顺序处理元素。创建`ArrayBlockingQueue`时,需要指定队列的容量,这有助于防止内存溢出,因为队列...

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

    1. `ArrayBlockingQueue`: 一个基于固定大小数组的阻塞队列,公平或非公平的锁策略可选。 2. `LinkedBlockingQueue`: 基于链表结构的阻塞队列,容量可以无限大,但内部维护了一个容量参数来控制性能。 3. `...

    java线程聊天室(阻塞队列实现)

    在Java中,阻塞队列的实现类包括ArrayBlockingQueue、LinkedBlockingQueue、PriorityBlockingQueue等。它们都实现了BlockingQueue接口,提供了put()和take()方法,分别用于插入和移除元素,这两个方法在队列满或空时...

    剖析Java中阻塞队列的实现原理及应用场景

    Java中的阻塞队列是一种特殊的线程安全的数据结构,它在多线程环境下用于高效地处理生产者-消费者问题。阻塞队列的核心特性在于当队列为空时,尝试获取元素的线程会被阻塞,直到队列中有元素可用;同样,当队列满时...

    阻塞队列实现生产者消费者模式Java开发Java经验技巧共

    2. **队列实现**:接着可能会讲解几种具体的阻塞队列实现,比如`ArrayBlockingQueue`是基于数组的有界队列,`LinkedBlockingQueue`基于链表,以及`PriorityBlockingQueue`是无界的优先级队列,它们各自的特点和适用...

    Java源码解析阻塞队列ArrayBlockingQueue功能简介

    Java源码解析阻塞队列ArrayBlockingQueue功能简介 ArrayBlockingQueue是Java中一个重要的阻塞队列实现,它基于数组实现了有界阻塞队列,提供FIFO(First-In-First-Out)功能。该队列的头元素是最长时间呆在队列中的...

    Java可阻塞队列-ArrayBlockingQueue

     ArrayBlockingQueue是由数组支持的有界阻塞队列,次队列按照FIFO(先进先出)原则,当队列已经填满,在去增加则会导致阻塞,这种阻塞类似线程阻塞。  ArrayBlockingQueue提供的增加和取出方法总结  使用...

    Java源码解析阻塞队列ArrayBlockingQueue介绍

    Java源码解析阻塞队列ArrayBlockingQueue介绍 Java源码解析阻塞队列ArrayBlockingQueue介绍是Java中的一种阻塞队列实现,使用ReentrantLock和Condition来实现同步和阻塞机制。本文将对ArrayBlockingQueue的源码进行...

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

    阻塞队列与普通队列的不同在于,当队列是空的时候,从队列中获取元素的操作将会被阻塞,或者当队列满时,往队列里面添加元素将会被阻塞。试图从空的阻塞队列中获取元素的线程将会被阻塞,直到其他的线程往空的队列...

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

    在Java中,自Java 5.0起,`java.util.concurrent`包提供了多种阻塞队列的实现,例如`ArrayBlockingQueue`、`LinkedBlockingQueue`、`PriorityBlockingQueue`等。这些类都实现了`java.util.concurrent.BlockingQueue`...

Global site tag (gtag.js) - Google Analytics