当前位置: 首页 > news >正文

通过SynchronousQueue方式实现线程间数据传递

通过SynchronousQueue方式实现线程间数据传递

线程 A 与线程 B 共同持有一个 SynchronousQueue 的引用,线程 B 调用 take 方法,阻塞以等待; 线程 A 运行

后计算出结果,将结果 put 到 queue 中。

package com.example.synchronousqueuedemo;import java.util.concurrent.SynchronousQueue;/*** @author tom*/
public class SynchronousQueueTest {public static void main(String[] args) {SynchronousQueue<Integer> queue = new SynchronousQueue<Integer>();// 线程A putThreadThread putThread = new Thread(new Runnable() {@Overridepublic void run() {System.out.println("put thread start");try {Thread.sleep(3000);System.out.println("put thread put对象");queue.put(1);} catch (InterruptedException e) {e.printStackTrace();}System.out.println("put thread end");}});//线程B takeThreadThread takeThread = new Thread(new Runnable() {@Overridepublic void run() {System.out.println("take thread start");try {System.out.println("take thread 等待put对象");System.out.println("take from putThread: " + queue.take());} catch (InterruptedException e) {e.printStackTrace();}System.out.println("take thread end");}});putThread.start();takeThread.start();}
}
# 程序输出
take thread start
take thread 等待put对象
put thread start
put thread put对象
put thread end
take from putThread: 1
take thread end

相关文章:

  • 北京网站建设多少钱?
  • 辽宁网页制作哪家好_网站建设
  • 高端品牌网站建设_汉中网站制作
  • 算法笔记|Day37动态规划X
  • Websocket笔记
  • Tarjan的脱机最小公共祖先算法详解
  • Linux 数据结构 内核链表 栈
  • 联影一面面经
  • 探索VB与ASP.NET的融合艺术:Web开发的高效实践
  • Centos7目前能下载到的位置
  • HSE软件组件有哪些?如何实现HSE与主机的通信(同步/异步)?如何使用HSE提供的安全服务?
  • mybatis if标签判断字符串是否相等
  • 【图像去噪】论文精读:Spatial-Adaptive Network for Single Image Denoising(SADNet)
  • 大数据智能风控核心:模型
  • 通过 pnpm 安装依赖包会发生什么
  • Matlab simulink建模与仿真 第三章(连续模块库)
  • 【HarmonyOS NEXT星河版开发实战】灯泡定时开关
  • Unity 图表插件Xcharts的一些坑
  • IE9 : DOM Exception: INVALID_CHARACTER_ERR (5)
  • #Java异常处理
  • “Material Design”设计规范在 ComponentOne For WinForm 的全新尝试!
  • ABAP的include关键字,Java的import, C的include和C4C ABSL 的import比较
  • AWS实战 - 利用IAM对S3做访问控制
  • canvas绘制圆角头像
  • ES10 特性的完整指南
  • gitlab-ci配置详解(一)
  • java B2B2C 源码多租户电子商城系统-Kafka基本使用介绍
  • Linux各目录及每个目录的详细介绍
  • log4j2输出到kafka
  • python学习笔记 - ThreadLocal
  • Python学习笔记 字符串拼接
  • select2 取值 遍历 设置默认值
  • Terraform入门 - 1. 安装Terraform
  • 爱情 北京女病人
  • 闭包--闭包作用之保存(一)
  • 什么是Javascript函数节流?
  • 试着探索高并发下的系统架构面貌
  • 体验javascript之美-第五课 匿名函数自执行和闭包是一回事儿吗?
  • 一道闭包题引发的思考
  • 哈罗单车融资几十亿元,蚂蚁金服与春华资本加持 ...
  • # MySQL server 层和存储引擎层是怎么交互数据的?
  • #100天计划# 2013年9月29日
  • #HarmonyOS:基础语法
  • #如何使用 Qt 5.6 在 Android 上启用 NFC
  • $jQuery 重写Alert样式方法
  • (06)金属布线——为半导体注入生命的连接
  • (1)Hilt的基本概念和使用
  • (STM32笔记)九、RCC时钟树与时钟 第一部分
  • (附源码)spring boot球鞋文化交流论坛 毕业设计 141436
  • (汇总)os模块以及shutil模块对文件的操作
  • (四)Linux Shell编程——输入输出重定向
  • (转)Linux下编译安装log4cxx
  • (转)VC++中ondraw在什么时候调用的
  • (最完美)小米手机6X的Usb调试模式在哪里打开的流程
  • .bat批处理(十):从路径字符串中截取盘符、文件名、后缀名等信息
  • .NET C# 使用GDAL读取FileGDB要素类
  • .NET CORE 2.0发布后没有 VIEWS视图页面文件
  • .net core 3.0 linux,.NET Core 3.0 的新增功能