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

织梦搭建企业网站windows搭建网站

织梦搭建企业网站,windows搭建网站,餐饮网站开发性能需求,怎么进入网站管理页面1.概述 java.util.concurrent.Exchanger。这在Java中作为两个线程之间交换对象的公共点。 2.Exchanger简介 Exchanger类可用于在两个类型为T的线程之间共享对象。该类仅提供了一个重载的方法exchange(T t)。 当调用exchanger时#xff0c;它会等待成对的另一个线程也调用它…1.概述 java.util.concurrent.Exchanger。这在Java中作为两个线程之间交换对象的公共点。 2.Exchanger简介 Exchanger类可用于在两个类型为T的线程之间共享对象。该类仅提供了一个重载的方法exchange(T t)。 当调用exchanger时它会等待成对的另一个线程也调用它。在这一点上第二个线程发现第一个线程正在等待其对象。线程交换它们持有的对象并发出交换信号然后它们可以返回。 让我们看一个例子以理解两个线程之间使用Exchanger进行消息交换 Test public void givenThreads_whenMessageExchanged_thenCorrect() {ExchangerString exchanger new Exchanger();Runnable taskA () - {try {String message exchanger.exchange(from A);assertEquals(from B, message);} catch (InterruptedException e) {Thread.currentThread().interrupt();throw new RuntimeException(e);}};Runnable taskB () - {try {String message exchanger.exchange(from B);assertEquals(from A, message);} catch (InterruptedException e) {Thread.currentThread().interrupt();throw new RuntimeException(e);}};CompletableFuture.allOf(runAsync(taskA), runAsync(taskB)).join();}在这里我们有两个线程使用共同的Exchanger交换彼此之间的消息。让我们看一个例子在这个例子中我们从主线程与一个新线程交换对象 Test public void givenThread_WhenExchangedMessage_thenCorrect() throws InterruptedException, ExecutionException {ExchangerString exchanger new Exchanger();Runnable runner () - {try {String message exchanger.exchange(from runner);assertEquals(to runner, message);} catch (InterruptedException e) {Thread.currentThread().interrupt();throw new RuntimeException(e);}};CompletableFutureVoid result runAsync(runner);String msg exchanger.exchange(to runner);assertEquals(from runner, msg);result.join();}请注意我们需要先启动runner线程然后在主线程中调用exchange()。 还要注意如果第二个线程在超时时间内未达到交换点第一个线程的调用可能会超时。第一个线程应等待多长时间可以使用重载的exchange(T t, long timeout, TimeUnit timeUnit)来控制。 3.无GC数据交换 Exchanger可以用于创建通过一个线程向另一个线程传递数据的管道类型的模式。 private static final int BUFFER_SIZE 100;Testpublic void givenData_whenPassedThrough_thenCorrect() throws InterruptedException, ExecutionException {ExchangerQueueString readerExchanger new Exchanger();ExchangerQueueString writerExchanger new Exchanger();int counter 0;Runnable reader () - {QueueString readerBuffer new ConcurrentLinkedQueue();while (true) {readerBuffer.add(UUID.randomUUID().toString());if (readerBuffer.size() BUFFER_SIZE) {try {readerBuffer readerExchanger.exchange(readerBuffer);} catch (InterruptedException e) {Thread.currentThread().interrupt();throw new RuntimeException(e);}}}};Runnable processor () - {QueueString processorBuffer new ConcurrentLinkedQueue();QueueString writerBuffer new ConcurrentLinkedQueue();try {processorBuffer readerExchanger.exchange(processorBuffer);while (true) {writerBuffer.add(processorBuffer.poll());if (processorBuffer.isEmpty()) {try {processorBuffer readerExchanger.exchange(processorBuffer);writerBuffer writerExchanger.exchange(writerBuffer);} catch (InterruptedException e) {Thread.currentThread().interrupt();throw new RuntimeException(e);}}}} catch (InterruptedException e) {Thread.currentThread().interrupt();throw new RuntimeException(e);}};Runnable writer () - {QueueString writerBuffer new ConcurrentLinkedQueue();try {writerBuffer writerExchanger.exchange(writerBuffer);while (true) {System.out.println(writerBuffer.poll());if (writerBuffer.isEmpty()) {writerBuffer writerExchanger.exchange(writerBuffer);}}} catch (InterruptedException e) {Thread.currentThread().interrupt();throw new RuntimeException(e);}};CompletableFuture.allOf(runAsync(reader), runAsync(processor), runAsync(writer)).get();}在这里我们有三个线程reader、processor和writer。它们共同作为一个单一的管道在它们之间交换数据。 readerExchanger在reader和processor线程之间共享而writerExchanger在processor和writer线程之间共享。 请注意此处的示例仅用于演示。在创建无限循环时务必小心while(true)。另外为保持代码的可读性我们省略了一些异常处理。 通过重用缓冲区来交换数据的这种模式允许减少垃圾回收。exchange方法返回相同的队列实例因此这些对象不会被垃圾回收。与任何阻塞队列不同Exchanger不会创建任何用于保存和共享数据的节点或对象。 创建这样的管道类似于Disruptor模式其中一个关键区别是Disruptor模式支持多个生产者和消费者而Exchanger可以在一对生产者和消费者之间使用。 4.总结 因此Java中的Exchanger是什么它是如何工作的我们看到了如何使用Exchanger类。此外我们创建了一个管道并演示了线程之间无GC的数据交换。
http://www.pierceye.com/news/756337/

相关文章:

  • 做旅游网站的数据怎么来垦利网站设计
  • 附近那里有做网站的微信公众平台注册官网
  • 雏鸟短视频app软件下载网站网站建设心得体会500字
  • 权威发布型舆情回应大连网站优化多少钱
  • 怎么做网站步骤免费的怎么用虚拟主机做网站步骤
  • 网站建设精品课程南昌企业网站建设哪家好
  • 网站空间不够用怎么办电子商务公司名字
  • 策划方案网站wordpress设置视频图片
  • 餐饮设计网站有哪些做副业的网站
  • 如何建设一个电子商务网站四川网站建设电话
  • 网站制作学习学网站开发顺序
  • 外语网站建设怎么知道网站的ftp
  • 苏州专业做网站的公司有哪些网络机柜定制
  • 提供服务的网站免费的进销存软件哪个简单好用
  • 长沙县政务网站网络公司名字大全寓意
  • 网站后台凡科建设有做网站维护的
  • 搭建网站需要什么软件上海在线
  • led灯外贸网站建设网站代码怎么优化
  • 网站建设维护什么意思江苏网络推广专员
  • 潍坊网站开发asp培训珠海市网站建设公司
  • 用什么做响应式网站建行个人余额查询网站
  • 做网站网站代理怎么找客源企业团建公司
  • 电子商务网站开发实战济南兼职做网站
  • 怎样创建网站视频学历提升的重要性
  • 百度搜索引擎录入网站1_ 掌握网站开发的基本流程 要求:熟悉网站开发与设计的基本流程.
  • 广州做网站建设如何在别人网站挂黑链
  • 宁德北京网站建设任丘建设银行网站
  • 积极加强网站建设连锁会员管理系统
  • 河南做外贸网站的公司简介wordpress做教育网站
  • 兴城做网站推广的企业网站后台管理软件