盐城网站优化价格游戏工作室加盟

web/2025/10/2 18:04:17/文章来源:
盐城网站优化价格,游戏工作室加盟,2021年中国十大电商平台排名,建房的网站大家好#xff0c;如果您在并发Java应用程序中工作#xff0c;那么您可能听说过java.util.concurrent包的Exchanger类。 Java中的Exchanger是Java 1.5中与CountDownLatch #xff0c; CyclicBarrier和Semaphores一起引入的另一个并发或同步实用程序。 顾名思义#xff0c; … 大家好如果您在并发Java应用程序中工作那么您可能听说过java.util.concurrent包的Exchanger类。 Java中的Exchanger是Java 1.5中与CountDownLatch CyclicBarrier和Semaphores一起引入的另一个并发或同步实用程序。 顾名思义 Exchanger允许两个线程在集合点或集合点见面并交换数据。 的 java.util.Exchanger是一个参数类它定义并保存要交换的对象的类型。 它有一个重载的方法称为 exchange() 用于在线程之间交换对象。 这是一种阻塞方法这意味着线程将调用 exchange()方法在交换点等待直到另一个线程到达。 一旦另一个线程到达两个线程都交换对象并从此方法返回。 交换方法的重载版本接受其他 TimeUnit对象并等待直到超时。 顺便说一句您还可以中断在交换点等待其他参与者的线程。 与CountDownLatch CyclicBarrier或Semaphore Exchanger实用程序只能同步两个线程这使其非常适合解决经典的生产者消费者问题 。 在本Java并发教程中您将通过使用Exchanger实现生产者-消费者设计模式来学习如何在Java中使用Exchanger。 顺便说一句我假设您熟悉Java编程语法和语义如果您是Java的完整入门者那么您可能会很难理解这个示例。 Exchanger类是一个易于理解和使用的简单同步实用程序。 在最后的两个并发教程中我们使用了wait和notify解决了生产者使用者请参阅此处 还使用BlockingQueue实现了生产者消费者 现在该使用Exchanger来实现了。 在此Java并发性教程中 我们将创建一个生产者和一个使用者线程 它们将使用Exchanger实用程序类交换缓冲区。 通常这是Exchanger的工作方式 1.首先创建一个Exchange对象例如ExchangerDequeLong stringExchanger new Exchanger() 这定义了线程之间将交换什么类型的对象。 在这种情况下两个线程将交换包含长值的Deque对象。 2.当线程A准备交换其缓冲区或对象时它将调用 Exchanger.exchange()方法。 这是一种阻塞方法 线程A将被阻塞直到线程B到来并将其对象传输到线程A 为止否则线程A被中断或超时。 3.线程B准备就绪时它还会调用exchange()方法。 现在线程A和B互相交换对象并从交换方法返回。 4.交换完成后线程A具有线程B的对象反之亦然。 同样我想强调Java并发技能的重要性并敦促每个Java开发人员花一些时间来掌握Java并发类。 带有Exchanger并发的Java程序 import java.util.ArrayDeque; import java.util.Deque; import java.util.concurrent.Exchanger;   /** * Exchanger Example in Java. Exchanger allows two Threads to meet at exchange * point and exchange data structure or objects. In this Java program, exchanger * is used to exchange buffer between producer and consumer.  * author Javin Paul  */   public class JavaExchangerTutorail {    public static void main(String args[]) throws InterruptedException {   //Creating Exchanger to exchange String object with other thread final Exchanger exchanger new Exchanger();   Thread producer new Thread( Producer : ){  Override public void run(){  ArrayDeque(); Deque stack new ArrayDeque();  //producer thread insert elments into stack while (stack.isEmpty()) {  stack.add(System.nanoTime()% 1000 ); //if stack is not empty then exchange it to consumer thread  try {  System.out.println(Thread.currentThread().getName() ready to exchange : stack); br // Exchanger return other Threads object stack exchanger.exchange(stack); System.out.println(Thread.currentThread().getName() got : stack);  } catch (InterruptedException ie) { ie.printStackTrace(); } (InterruptedException ie) { ie.printStackTrace(); }  }  }  };    Thread consumer new Thread( Consumer : ){  Override  public void run(){  ArrayDeque(); Deque stack new ArrayDeque();   //consumer thread takes object from stack and prints  do { //if stack is empty then exchange it to producer for refill try {  System.out.println(Thread.currentThread().getName() ready to exchange : stack); stack exchanger.exchange(stack); System.out.println(Thread.currentThread().getName() got : stack); stack.remove();  } catch (InterruptedException ie) { ie.printStackTrace(); } (InterruptedException ie) { ie.printStackTrace(); }  } while (stack.isEmpty()) ;    }  };    producer.start(); br //sleeping before starting consumer to give producer time to produce Thread.sleep( 1000 ); consumer.start();    }     }     Output:   Producer : ready to exchange : [ 247 ]   Consumer : ready to exchange : []   Producer : got : []   Consumer : got : [ 247 ]   Producer : ready to exchange : [ 692 ]   Consumer : ready to exchange : []   Consumer : got : [ 692 ]   Consumer : ready to exchange : []   Producer : got : [] br 代码和输出说明 如果看上面的示例所有代码都在main方法内部。 之所以使Exchanger实例成为最终实例是因为我们要从匿名内部类访问它们并且只能从匿名内部类访问最终局部变量。 后来我们创建了两个线程 Producer和Consumer 。 生产者检查队列如果队列为空则将当前nano时间的最后三位相加并调用exchange方法。 现在直到消费者线程到达交换点我的意思是直到生产者线程调用exchange方法生产者线程才会被阻塞。 使用者到达后双方互相交换堆栈并从exchange方法返回。 此时生产者有一个空的消费者堆栈而消费者有一个非空的生产者堆栈我的意思是他们有彼此的对象 。 为了理解哪个线程正在交换哪个堆栈我们在每个线程交换之前和之后打印堆栈的内容。 如果您查看输出这是不言自明的。 顺便提一下与线程一样不能保证以相同的顺序获得输出。 在第三次迭代中您可以看到使用者具有一个已清空的堆栈甚至可以在安排生产者线程并从交换方法返回之前准备交换空堆栈。 这就是如何在Java中使用Exchanger的全部内容。 交换器类是一个很好的简单同步工具非常适合于协调两个线程。 应该使用交换器来实现具有一个生产者和一个消费者的生产者-消费者模式。 如果您想了解有关Java并发类的更多信息建议您检查以下资源 进阶学习 完整的Java Masterclass Java多线程并发和性能优化 Java并发实践–本书 将并发和多线程应用于常见的Java模式 您可能喜欢的其他Java并发文章 2020 Java开发人员路线图 路线图 Java并发之前发生了什么 回答 10个Java多线程和并发最佳实践 文章 Java中的前50个多线程和并发问题 问题 掌握Java并发性的5大书籍 书籍 10个面向初学者和中级开发者的免费Java课程 课程 如何避免Java死锁 回答 了解Java程序中的数据和代码流 回答 Java Concurrency in Practice是否在2020年仍然有效 回答 Java中CyclicBarrier和CountDownLatch之间的区别 回答 10个技巧成为2020年的一个更好的Java开发 提示 如何使用wait-notify在Java中进行线程间通信 回答 深入学习Java多线程的前5门课程 课程 感谢您到目前为止阅读本文。 如果您喜欢此Java并发教程请与您的朋友和同事分享。 如果您有任何问题或反馈请留下笔记。 PS –如果您是Java世界的新手并且想与Concurrency一起学习核心概念但是想找一些免费的入门课程那么您也可以在Udemy上查看此免费的Java Multithreading课程 。 这也是学习Java并发性的一门很好的免费课程。 翻译自: https://www.javacodegeeks.com/2020/05/how-to-use-exchanger-in-java-with-example.html

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/web/85746.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

门户网站建设基础术语四川住房和城乡建设厅

1、下载Redis Redis官网:https://redis.io/ 历史版本: http://download.redis.io/releases 2、连接Linux(或者VMwear) 我们安装的是linux版本的redis 打开xftp我们需要先将我们的Redis上传到服务器上 解压到这里 解压的指令 …

凡科建站相关链接建筑模板做凳子

【ES6.0】- Promise对象 文章目录 【ES6.0】- Promise对象一、概述二、Promise状态三、Promise方法3.1 Promise.prototype.then方法:链式操作3.2 Promise.prototype.catch方法:捕捉错误3.3 Promise.race方法:捕捉错误3.4 Promise.any()3.5 Pr…

做网站最省钱中铁建设集团

在模拟或设计软件中创建道路并指定其特征是一个复杂但必要的过程,尤其是在进行交通模拟、城市规划或道路设计项目时。以下是一个步骤化的指南,用于说明如何创建道路特征: 水平剖面: 使用设计软件的绘图工具来绘制道路的中心线或边…

wordpress多站点 用户四川学校网站建设

antlr4 代码 语法树DSL是很酷的东西,但我不清楚它们有什么用。 然后我意识到它们对以下方面有好处: 摆脱复杂的UI 意思是 更快的做事方式 而已。 当我阅读此博客时,我得出了这个结论。 如果您的用户是技术人员,并且不惧怕类…

服装网站开发手机网站推荐哪些

来源:计算机研究与发展前 言近几年来人工智能技术的飞速发展使得其应用迅猛扩大,而传统的计算机体系结构对于面向人工智能的应用在处理速度、能耗、使用的方便性等方面有着诸多不足。随着人工智能应用的发展,面向人工智能的体系结构成为体系结…

有无广告销售版本"有广告免费无广告收费"网站短网址还原在线生成

最近在网上看到了荧光图,觉得挺帅气,去网上查询了怎么制作荧光图,发现大部分都是QGIS的教程,作为ArcGIS的死忠用户,决定在ArcGIS Pro中实现,其实挺简单的。 1、软件:ArcGIS Pro3.0 2、点数据&a…

班级网站建设首页报告怎样弄一个自己的平台

一、模块题目 二、原理图 1、数码管

响应式网站图片代码板瓦工安装wordpress

上一篇文章介绍到 servicemanager 的 main 函数中主要做了四件事: 1)初始化 binder 驱动。 2)将自身以“manager”添加到 servicemanager 中的 map 集合中。 3)注册成为 binder 驱动的上下问管理者。 4)给 Looper 设置 callback,进入无限循环,处理 client 端发来的请求。…

网站后台管理系统进入php做直播类型的网站

文章目录 0.前言1.模型下载2.配置环境2.1 下载项目文件2.2 配置环境 3.开始推理4.总结 0.前言 本博客将介绍ChatGLM3-6B大模型在Ubuntu上的本地部署教程 1.模型下载 由于毛毛张的服务器服务无法科学上网,所以模型的相关文件必须现在本地下载好,再上传到…

石家庄专业网站制北京网站建立

docker 概念 -云计算的基石 docker的一个软件: 开源 docker基本组成 docker主机(Host):安装了Docker程序的机器(Docker直接安装在操作系统之上); docker仓库(Registry):用来保存各种打包好的软件镜像&a…

常用的网站推广装修公司起名

概述 基于Flume MongoDB,对现有的多个应用系统进行日志采集。特点 采集范围每一次用户请求的请求信息。数据量大尽量减少现有系统的改动数据流图 说明:首先考虑的结构体系,是直接在应用系统中,将日志数据写到Flume;但…

群晖 做网站服务器营销网站建设哪里便宜

本文记录Windows环境下的MongoDB安装与使用总结。 【1】官网下载 官网下载地址:Download MongoDB Community Server | MongoDB 这里可以选择下载zip或者msi,zip是解压后自己配置,msi是傻瓜式一键安装。这里我们分别对比进行实践。 【2】ZI…

网站的盈利方式志愿服务网站开发

文章目录 前言 概念 算法 训练 性能 应用 参考资料 前言 见《初试人工智能》 概念 人工智能系统(artifieial intelligence system),针对人类定义的给定目标,产生诸如内容、预测、推荐或决策等输出的一类工程系统。该工程系…

备案期间 需要关闭网站吗seo每天一贴

Spring的IOC容器初始化流程 IOC容器初始化在SpringApplication对象创建完毕执行run方法时执行refreshContext()时开始。 准备BeanFactory,设置其类加载器和environment等 执行BeanFactory后置处理器,扫描要放入容器的Bean信息,得到对应的Bea…

网站关键词没排名怎么办领秀网站建设

保存token的最佳方式取决于具体的应用场景和需求。以下是几种常见的保存token的方式及其优缺点,以便您根据实际情况进行选择: HTTP Only Cookies: 优点:Cookies可以自动随HTTP请求发送,且HTTP Only属性可以防止JavaS…

用ps做美食网站母婴网站源码 带采集

C OJ基础 在学校学习C程序设计基础课程的OJ题目 缺少第二十题 这里写目录标题 C OJ基础习题练习(一)打印图形习题练习(二)数据的输入输出习题练习(三)函数重载习题练习(四)设计矩形类习题练习(五)定义Tree类习题练习(六)完善职工工资类Salary的设计习题练习(七)设计矩形类recta…

自建购物网站多少钱有没有做cad单的网站

目录 安装Docker 安装yum工具 更新本地镜像源 安装docker 启动docker 关闭防火墙 docker启动命令 配置镜像加速 docker的使用 拉取nginx 查看本地镜像 把镜像文件nginx导出成tar文件 查看是否导出成功 ​编辑 删除本地镜像nginx:latest 导入镜像文件nginx 拉取…

北京南站地铁线路图郑州市网络设计公司

科目编号:8663 座位号 2017-2018学年度第二学期期末考试 老年保健按摩试题 2018年7月 一、名词解释(本大题共5小题,每小题4分,共计20分) 1.骨度分寸法: 2.三叉神经痛: 3.间接标志法&#xff…

江苏省建设厅网站资质升级wordpress安装错误310

项目介绍 采用JAVA语言,结合SpringBoot框架与Vue框架以及MYSQL数据库设计并实现的。本村委会管理系统主要包括个人中心、村民管理、村委会管理、村民信息管理、土地变更管理、农业补贴管理、党员信息管理等多个模块。它帮助村委会管理实现了信息化、网络化&#xf…

冀州建网站亚马逊海外网站

1.语言的根本属性 语言的根本属性,通常指的是那些使语言区别于其他任何形式的信息传递系统的本质特征,以下是一些关键的根本属性: 社会性:语言首先是人类社会的产物,是社会成员之间进行思想交流和信息传递的主要工具&…