synchronousqueue场景_java并发队列之SynchronousQueue
特点:阻塞队列,此队列有点特殊,没有存储空间,也就是不存储数据。每一个put操作必须等待一个take操作,反之,每一个take操作也必须等待一个put操作。如果put进去一个数据,那么必须等待这条数据被take走才put操作才算是执行完成。
应用场景:目前没有想到我碰到的场景,尴尬,但感觉就好比,一个人去相亲,一直等着另一方,只有另一方来了,两个人才可以手牵手一起走,不然就一直等着,有种同步执行的感觉。
代码案例:
package com.example.web.web;
import org.springframework.web.bind.annotation.RequestMapping;
import org.springframework.web.bind.annotation.RestController;
import java.util.concurrent.SynchronousQueue;
import java.util.concurrent.TimeUnit;
@RestController
public class HomeController {
@RequestMapping("/index")
public String index() throws Exception {
SynchronousQueue queue = new SynchronousQueue<>();
//生产者
new Thread(() ->
{
try {
TimeUnit.MILLISECONDS.sleep(3000);
System.out.println("生产者begin");
queue.put("测试数据");
//queue.offer("测试数据", 5, TimeUnit.SECONDS);
System.out.println("生产者end");
} catch (Exception ex) {
}
}).start();
//消费者
new Thread(() ->
{
try {
//TimeUnit.MILLISECONDS.sleep(3000);
System.out.println("消费者begin");
String aa = queue.take();
//String aa = queue.poll(5, TimeUnit.SECONDS);
System.out.println("消费者end" + aa);
} catch (Exception ex) {
}
}).start();
//主线程也等待下
TimeUnit.SECONDS.sleep(10);
return "网站已得到响应";
}
}
添加方法除了put()还有offer(),offer方法不会阻塞线程,有返回结果来判断是否接受数据成功。可传入参数,参数含义就是存在队列中的时间,如果到时间没有相对的操作来执行就会过期返回false。
take()还有poll()这两个方法也是一样的,用poll需要添加参数,如果不添加参数就是不等待直接获取,获取不到就是null值。如果有参数表示在规定时间内等待,在等待时间内有put操作则马上返回值,超过规定时间无put操作就返回null。
在new SynchronousQueue()时可以传递参数,bool类型,表示是否公平排序策略,这个公平排序就是后面来的操作上有序还是无序(说无序其实还是有序)。公平就是FIFO(先进先出),非公平就是LIFO(后进先出)。
参考链接:
https://www.cnblogs.com/duanxz/p/3252267.html
https://blog.csdn.net/hudashi/article/details/7076814
synchronousqueue场景_java并发队列之SynchronousQueue相关推荐
- java 代码段 执行超时 抛异常_Java 并发队列详解TransferQueue、BlockingQueue、BlockingDeque
阻塞队列 BlockingQueue java.util.concurrent 包里的 BlockingQueue 接口表示一个线程安放入和提取实例的队列. BlockingQueue 用法 Bloc ...
- java 并发队列_JAVA并发编程:阻塞队列BlockingQueue之SynchronousQueue
前面在讲解Executors工厂创建可缓存线程的线程池(newCachedThreadPool)的时候有提到过SynchronousQueue队列,该线程池使用 SynchronousQueue 作为 ...
- java并发队列_Java并发教程–阻塞队列
java并发队列 如第3部分所述,Java 1.5中引入的线程池提供了核心支持,该支持很快成为许多Java开发人员的最爱. 在内部,这些实现巧妙地利用了Java 1.5中引入的另一种并发功能-阻塞队列 ...
- 10分钟搞定 Java 并发队列
前言 如果按照用途与特性进行粗略的划分,JUC 包中包含的工具大体可以分为 6 类: 执行者与线程池 并发队列 同步工具 并发集合 锁 原子变量 在[并发系列]中,主要讲解了 执行者与线程池,同步工具 ...
- 10分钟搞定 Java 并发队列好吗?好的
前言 如果按照用途与特性进行粗略的划分,JUC 包中包含的工具大体可以分为 6 类: 执行者与线程池 并发队列 同步工具 并发集合 锁 原子变量 在[并发系列]中,主要讲解了 执行者与线程池,同步工具 ...
- 聊聊Java中的并发队列中 有界队列和无界队列的区别
转载自 https://blog.csdn.net/AJ1101/article/details/81711812 本文主要总体的说一说各种并发队列 首先来一张全体照 从有界无界上分 常见的有界 ...
- 并发队列、线程池、锁
1.CountDownLatch(计数器) CountDownLatch 类位于java.util.concurrent包下,利用它可以实现类似计数器的功能.比如有一个任务A,它要等待其他任 ...
- 解读 Java 并发队列 BlockingQueue
最近得空,想写篇文章好好说说 java 线程池问题,我相信很多人都一知半解的,包括我自己在仔仔细细看源码之前,也有许多的不解,甚至有些地方我一直都没有理解到位. 说到线程池实现,那么就不得不涉及到各种 ...
- 并发队列的介绍及使用
在JDK1.5新加入了一个包concurrent,位于java.util.concurrent.在我们写业务代码的时候,可能最为常见就是ConcurrentHashMap.当然今天我们的主角不是他,而 ...
最新文章
- 科大讯飞全新1024:3大计划,200项A.I.能力,全链路驱动应用场景创新!
- p2p网络测试工具_自媒体 IPFS官方升级DHT方案,提升网络整体性能
- 应用程序无法正常启动(0xc000007b)。请单击“确定”关闭应用程序
- strlen 与 sizeof 的区别详解
- 智能、弹性、易用:云时代的负载均衡之道
- 金融计算器 npv_一个工具箱 之 净现值(NPV)计算器
- TestNG和Maven配置指南
- autosar工具链_Autosar开发与手写代码开发的区别
- Jstatd命令(Java Statistics Monitoring Daemon)
- Sister Sharp
- Kafka 分布式消息系统 基础概念剖析
- php中paynotify,PayNotifyValidator.php
- UCRT: VC 2015 Universal CRT, by Microsoft
- QCA9531修改寄存器值控制GPIO
- (老机福音,重装后恢复软件设置)Ghost_XP_战神 V11 老机版
- GIGABYTE技嘉主板内存手动超频教程
- 查询结果按中文拼音顺序排序
- java获取文件名格式 / java获取文件名后缀
- c语言考试的说说带图片致自己,励志说说带图片致自己
- 沐风:可怕的想什么就来什么
热门文章
- SAP创建Web Service以及用ABAP调用
- SAP 物料分类账常用表
- 如何在TC里输出下拉列表
- 好用的数据分析工具能顶半个BI团队?大佬力荐这款工具值得体验
- 华为云FusionInsight+永洪BI共建政企用数之道,普惠千行百业
- a*算法的优缺点_五种聚类算法一览与python实现
- Oracle中的within,Oracle函数 --聚合函数中的语法within group
- 在Python 中 a=a+b 与 a+=b 区别,你真的知道嘛?
- Python基础教程:super()方法详解
- python3 基础教程: 文件read方法(read、readline、readlines)