`

BlockingQueue,阻塞队列实现线程通信

 
阅读更多

可阻塞队列

  (1) 队列包含固定长度的队列和不固定长度的队列。
  (2)什么是可阻塞队列,阻塞队列的作用与实际应用,阻塞队列的实现原理
ArrayBlockingQueue
    看ArrayBlockingQueue类的帮助文档,其中有各个方法的区别对比的表格
    只有put方法和take方法才具有阻塞功能
 (3)用3个空间的队列来演示阻塞队列的功能和效果
 (4)用两个具有1个空间的队列来实现同步通知的功能
 (5)阻塞队列与Semaphore有些相似,但也不同。阻塞队列是一方存放数据,另一方释放数据,Semaphore
通常则是由同一方设置和释放信号量

可用阻塞队列实现线程通信

package com.ronbay.thread.timer;

import java.util.concurrent.ArrayBlockingQueue;
import java.util.concurrent.BlockingQueue;


public class BlockingQueueCommunication {

	public static void main(String[] args) {
		final Business business = new Business();
		
		new Thread(new Runnable() {
			
			@Override
			public void run() {
				for (int i = 0; i < 50; i++) {
					business.sub(i);
				}
				
			}
		}).start();
		
		for (int i = 0; i < 50; i++) {
			business.main(i);
		}
	}
  static class Business{
	  BlockingQueue<Integer> queue1 = new ArrayBlockingQueue<Integer>(1);
	  BlockingQueue<Integer> queue2 = new ArrayBlockingQueue<Integer>(1);
	  //匿名构造方法,运行时机在任何构造方法之前,创建几次对象就调用几次
	  {
		  try {
			  System.out.println("dvsdvsdvsxxxasdcasfas");
			  queue2.put(1);
		} catch (Exception e) {
		}
	  }
	  public  void sub(int i ){
		  try {
			queue1.put(1);
		} catch (InterruptedException e1) {
			e1.printStackTrace();
		}
		  for (int j = 1; j <= 10; j++) {
			System.out.println("sub thread sequence of " + j + ",loop of " + i);
		}
		try {
			queue2.take();
		} catch (InterruptedException e) {
			e.printStackTrace();
		}
	  }
	  public  void main(int i){
		  try {
			queue2.put(1);
		} catch (InterruptedException e) {
			e.printStackTrace();
		}
		  for (int j = 1; j <= 100; j++) {
			  System.out.println("main thread sequence of " + j + ",loop of " + i);
		}
		  
		  try {
			queue1.take();
		} catch (InterruptedException e) {
			e.printStackTrace();
		}
		  
	  }
  }
}

 

分享到:
评论

相关推荐

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

    Java中的阻塞队列(BlockingQueue)是一种线程安全的数据结构,它在多线程环境下的生产者消费者...在实际开发中,根据具体需求选择合适的阻塞队列实现,并正确使用其提供的方法,可以有效解决线程间的同步和通信问题。

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

    在Java编程中,`BlockingQueue`是一个非常重要的并发工具类,它主要用于线程间的数据通信。`newFixedThreadPool`是`java.util.concurrent`包中的一个线程池工厂方法,用于创建固定数量线程的线程池。`FutureTask`则...

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

    它们都实现了BlockingQueue接口,提供了put()和take()方法,分别用于插入和移除元素,这两个方法在队列满或空时会自动阻塞对应的线程。 在聊天室场景中,我们可以将用户发送的消息作为一个生产过程,服务器接收和...

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

    阻塞队列的核心特性在于其在队列为空或满时能够自动阻塞线程,从而实现线程间的同步和通信。这种机制使得生产者和消费者线程可以高效地协同工作,而无需显式地使用锁和条件变量。 在Java中,自Java 5.0起,`java....

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

    在这个场景中,阻塞队列(BlockingQueue)是实现这种模式的理想工具,因为它提供了线程安全的数据同步机制。 阻塞队列在Java中的实现主要由`java.util.concurrent`包下的几个类提供,如`ArrayBlockingQueue`、`...

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

    3. **消息队列**:消息队列使用阻塞队列来存储消息,可以实现异步通信,提高系统的吞吐量和响应性能。 4. **缓存系统**:阻塞队列用于存储缓存数据,确保数据的一致性和完整性。 5. **并发任务处理**:多个工作线程...

    生产者/消费者模式 阻塞队列 LinkedBlockingQueue

    LinkedBlockingQueue是一个基于链表结构的阻塞队列,它实现了BlockingQueue接口,具备线程安全的特性。队列内部通过双向链表维护元素顺序,这使得插入和删除操作具有O(1)的时间复杂度。同时,作为阻塞队列,当生产者...

    并发-线程池和阻塞队列

    阻塞队列(BlockingQueue)是Java并发包(java.util.concurrent)中的一个重要数据结构,它实现了队列的特性,同时具备线程安全的特性。当队列满时,添加元素的线程会被阻塞,直到队列有空位;当队列为空时,取出...

    多线程通信ThreadDemo

    7. **BlockingQueue**:队列实现的一种,提供了线程安全的数据结构,可以用来实现线程间的通信和协作。例如,`ArrayBlockingQueue`、`LinkedBlockingQueue`和`PriorityBlockingQueue`。 8. **CompletableFuture**:...

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

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

    java中线程队列BlockingQueue的用法

    `BlockingQueue`接口位于`java.util.concurrent`包中,提供了线程安全的数据结构,可以用于实现生产者-消费者模型、线程间的通信以及有效地管理共享资源。下面我们将深入探讨`BlockingQueue`的用法及其相关知识点。 ...

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

    在Java编程中,阻塞队列是一种特殊类型的并发数据结构,它在多线程环境中的应用广泛,主要用于线程间的协作通信。阻塞队列在队列满时会阻止生产者线程添加元素,在队列空时会阻止消费者线程取出元素,直到条件满足...

    spring-blockingqueue:用Spring Boot阻止队列

    BlockingQueue是一种线程安全的数据结构,它在多线程环境下的数据共享和通信中扮演着关键角色。下面我们将深入探讨Spring Boot与BlockingQueue的结合使用。 **什么是BlockingQueue?** BlockingQueue是Java并发包`...

    消息分发框架(基于JAVA阻塞队列实现、 生产者消费者模型)

    基于Java的实现通常会利用阻塞队列(BlockingQueue)和生产者消费者模型来确保线程安全和高效率。在这个框架中,生产者负责生成任务或消息,而消费者则负责处理这些任务或消息。 ### Java 阻塞队列 Java阻塞队列是...

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

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

    用成员变量进行线程通信.rar_线程通信

    3. **BlockingQueue**:Java并发包中的阻塞队列,如`ArrayBlockingQueue`,提供了线程安全的数据结构,可以用于线程间的生产者-消费者模型通信。 4. **CountDownLatch/CyclicBarrier/Semaphore**:这些是Java并发...

    JAVA多线程通信学习_服务器多线程通信_

    在服务器多线程通信中,常常需要用到阻塞队列(BlockingQueue),如ArrayBlockingQueue、LinkedBlockingQueue等。它们提供了一种线程安全的数据结构,允许生产者线程添加元素,消费者线程移除元素,而无需显式同步。...

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

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

    java 多线程 队列工厂

    队列工厂则是实现多线程间通信和任务调度的一种设计模式,它提供了一种抽象和统一的方式来创建和管理队列实例。 ### 1. Java 多线程 多线程是指在单个程序中同时执行多个线程(任务)的能力。Java通过`Thread`类和...

    java线程通信课程设计

    首先,我们需要了解Java中实现线程通信的关键类和接口,如`Object`类的`wait()`、`notify()`和`notifyAll()`方法,以及`java.util.concurrent`包下的`BlockingQueue`、`Semaphore`、`CyclicBarrier`等工具类。...

Global site tag (gtag.js) - Google Analytics