返回顶部
首页 > 资讯 > 后端开发 > Python >解析Java并发Exchanger的使用
  • 496
分享到

解析Java并发Exchanger的使用

2024-04-02 19:04:59 496人浏览 薄情痞子

Python 官方文档:入门教程 => 点击学习

摘要

目录类定义类继承构造函数具体的例子结语类定义 public class Exchanger<V> 其中V表示需要交换的对象类型。 类继承 java.lang.Obj

类定义

public class Exchanger<V>

其中V表示需要交换的对象类型。

类继承

java.lang.Object

java.util.concurrent.Exchanger<V>

Exchanger直接继承自Object。

构造函数

Exchanger() 

Exchanger提供一个无参构造函数。

两个主要方法

1.public V exchange(V x) throws InterruptedException

当这个方法被调用的时候,当前线程将会等待直到其他的线程调用同样的方法。当其他的线程调用exchange之后,当前线程将会继续执行。

在等待过程中,如果有其他的线程interrupt当前线程,则会抛出InterruptedException。

2.public V exchange(V x, long timeout, TimeUnit unit) throws InterruptedException, TimeoutException

和第一个方法类似,区别是多了一个timeout时间。如果在timeout时间之内没有其他线程调用exchange方法,则会抛出TimeoutException。

具体的例子

我们先定义一个带交换的类:


@Data
public class CustBook {

    private String name;
}

然后定义两个Runnable,在run方法中调用exchange方法:


@Slf4j
public class ExchangerOne implements Runnable{

    Exchanger<CustBook> ex;

    ExchangerOne(Exchanger<CustBook> ex){
      this.ex=ex;
    }

    @Override
    public void run() {
    CustBook custBook= new CustBook();
        custBook.setName("book one");

        try {
            CustBook exhangeCustBook=ex.exchange(custBook);
            log.info(exhangeCustBook.getName());
        } catch (InterruptedException e) {
            e.printStackTrace();
        }
    }
}

@Slf4j
public class ExchangerTwo implements Runnable{

    Exchanger<CustBook> ex;

    ExchangerTwo(Exchanger<CustBook> ex){
      this.ex=ex;
    }

    @Override
    public void run() {
    CustBook custBook= new CustBook();
        custBook.setName("book two");

        try {
            CustBook exhangeCustBook=ex.exchange(custBook);
            log.info(exhangeCustBook.getName());
        } catch (InterruptedException e) {
            e.printStackTrace();
        }
    }
}

最后在主方法中调用:


public class ExchangerUsage {

    public static void main(String[] args) {
        Exchanger<CustBook> exchanger = new Exchanger<>();
        // Starting two threads
        new Thread(new ExchangerOne(exchanger)).start();
        new Thread(new ExchangerTwo(exchanger)).start();
    }
}

我们看下结果:

22:14:09.069 [Thread-1] INFO com.flydean.ExchangerTwo - book one

22:14:09.073 [Thread-0] INFO com.flydean.ExchangerOne - book two

可以看到对象已经被交换了。

结语

Exchanger在两个线程需要交换对象的时候非常好用。大家可以在实际工作生活中使用。

本文的例子https://GitHub.com/ddean2009/learn-java-concurrency/tree/master/Exchanger

以上就是解析java并发Exchanger的使用的详细内容,更多关于Java并发Exchanger的使用的资料请关注编程网其它相关文章!

--结束END--

本文标题: 解析Java并发Exchanger的使用

本文链接: https://lsjlt.com/news/127337.html(转载时请注明来源链接)

有问题或投稿请发送至: 邮箱/279061341@qq.com    QQ/279061341

猜你喜欢
  • 解析Java并发Exchanger的使用
    目录类定义类继承构造函数具体的例子结语类定义 public class Exchanger<V> 其中V表示需要交换的对象类型。 类继承 java.lang.Obj...
    99+
    2024-04-02
  • Java并发编程之Exchanger方法详解
    简介 Exchanger是一个用于线程间数据交换的工具类,它提供一个公共点,在这个公共点,两个线程可以交换彼此的数据。 当一个线程调用exchange方法后将进入等待状态,直到另外一...
    99+
    2024-04-02
  • Java开发JUC交换器Exchanger使用详解
    目录前言Exchanger介绍API介绍Exchanger使用实现机制总结前言 JDK中提供了不少的同步工具,现在分享一个相对比较冷门的同步工具——交换器(E...
    99+
    2022-12-08
    Java JUC交换器Exchanger JUC交换器
  • Java并发工具类Exchanger的相关知识总结
    一、Exchanger的理解 Exchanger 属于java.util.concurrent包; Exchanger 是 JDK 1.5 开始提供的一个用于两个工...
    99+
    2024-04-02
  • java并发数据包Exchanger线程间的数据交换器
    java.util.concurrent.Exchanger可以用来进行数据交换,或者被称为“数据交换器”。两个线程可以使用Exchanger交换数据,下图用...
    99+
    2024-04-02
  • Exchanger方法怎么在Java中使用
    这期内容当中小编将会给大家带来有关Exchanger方法怎么在Java中使用,文章内容丰富且以专业的角度为大家分析和叙述,阅读完这篇文章希望大家可以有所收获。Exchanger的使用方法介绍exchange(V x):阻塞当前线程,直到另外...
    99+
    2023-06-14
  • 浅析Java中并发工具类的使用
    目录CountDownLatch概述案例原理源码分析CyclicBarrier概述案例源码分析与CountDonwLatch的区别Semaphore概述使用场景案例原理Exchang...
    99+
    2022-12-08
    Java并发工具类使用 Java并发工具类 Java并发
  • java ReentrantLock并发锁使用详解
    目录一、ReentrantLock是什么1-1、ReentrantLock和synchronized区别1-2、ReentrantLock的使用1-2-1、ReentrantLock...
    99+
    2022-11-13
    java ReentrantLock并发锁 java ReentrantLock
  • Java并发之BlockingQueue的使用
    Java的并发包中提供了一个BlockingQueue接口,它是一个支持线程安全的队列,并且在队列为空时会阻塞消费者线程,直到队列不...
    99+
    2023-08-11
    java
  • Exchanger的原理与使用方法
    本篇内容介绍了“Exchanger的原理与使用方法”的有关知识,在实际案例的操作过程中,不少人都会遇到这样的困境,接下来就让小编带领大家学习一下如何处理这些情况吧!希望大家仔细阅读,能够学有所成! ...
    99+
    2024-04-02
  • Java多线程并发FutureTask使用详解
    目录基本使用代码分析继承关系FutureRunnableFutureFutureTask状态属性内部类构造方法检索 FutureTask 状态取消操作计算结果立刻获取结果或异常run...
    99+
    2024-04-02
  • java高并发的并发级别详解
    目录阻塞无饥饿(Starvation-Free)无障碍(Obstruction-Free)无锁(Lock-Free)等待总结阻塞、无饥饿、无障碍、无锁、无等待几种。 阻塞 一个线程是...
    99+
    2024-04-02
  • java高并发中并发级别的示例分析
    这篇文章给大家分享的是有关java高并发中并发级别的示例分析的内容。小编觉得挺实用的,因此分享给大家做个参考,一起跟随小编过来看看吧。阻塞一个线程是阻塞的,那么在其他线程释放资源之前,当前线程无法继续执行。当我们使用synchronized...
    99+
    2023-06-25
  • Java并发指南13:Java 中的 HashMap 和 ConcurrentHashMap 全解析
    本文转自:https://www.javadoop.com/本系列文章将整理到我在GitHub上的《Java面试指南》仓库,更多精彩内容请到我的仓库里查看https://github.com/h3pl/Java-Tutorial喜欢的话麻烦...
    99+
    2023-06-02
  • Java并发编程之CountDownLatch源码解析
    目录一、前言二、使用三、源码分析四、总结一、前言 CountDownLatch维护了一个计数器(还是是state字段),调用countDown方法会将计数器减1,调用await方法会...
    99+
    2024-04-02
  • Java并发编程之LongAdder源码解析
    目录前言源码简介前言 上一篇文章 Java并发编程之原子类(二)中介绍了LongAdder常用的方法,今天我们根据源码来分析一下它的基本实现流程。 This class is usu...
    99+
    2023-05-18
    Java并发LongAdder Java并发
  • java并发ThreadPoolExecutor如何使用
    这篇文章主要介绍“java并发ThreadPoolExecutor如何使用”的相关知识,小编通过实际案例向大家展示操作过程,操作方法简单快捷,实用性强,希望这篇“java并发ThreadPoolExecutor如何使用”文章能帮助大家解决问...
    99+
    2023-07-05
  • Java并发编程之CountDownLatch的使用
    目录前言基本使用await尝试获取锁获取锁失败countDown方法前言 CountDownLatch是一个倒数的同步器,和其他同步器不同的是,state为0时表示获取锁成功。常用来...
    99+
    2023-05-20
    Java并发编程CountDownLatch Java CountDownLatch使用 Java CountDownLatch
  • Java并发实例之CyclicBarrier的使用
    最近一直整并发这块东西,顺便写点Java并发的例子,给大家做个分享,也强化下自己记忆,如果有什么错误或者不当的地方,欢迎大家斧正。CyclicBarrier是一种多线程并发控制实用工具,和CountDownLatch非常类似,它也可以实现线...
    99+
    2023-05-30
    java 并发 cyclicbarrier
  • java并发编程之深入理解Synchronized的使用
    1.为什么要使用synchronized 在并发编程中存在线程安全问题,主要原因有:1.存在共享数据 2.多线程共同操作共享数据。关键字synchronized可以保证在同一时刻,只...
    99+
    2024-04-02
软考高级职称资格查询
编程网,编程工程师的家园,是目前国内优秀的开源技术社区之一,形成了由开源软件库、代码分享、资讯、协作翻译、讨论区和博客等几大频道内容,为IT开发者提供了一个发现、使用、并交流开源技术的平台。
  • 官方手机版

  • 微信公众号

  • 商务合作