美文网首页
实现异步转同步

实现异步转同步

作者: leo小超 | 来源:发表于2019-05-10 23:36 被阅读0次

极客时间-《Java并发编程实战》学习笔记

异步方法:调用方法,在方法中启动子线程
异步调用:启动子线程调用方法
异步转同步:由于同步简单易用,将异步方法进行封装,同步调用,等待结果

Lock和Condition

Lock lock = new ReentrantLock();
Condition condition = lock.newCondition();
// method 加锁
lock.lock();
try {
 while(条件不满足) {
   condition.await(timeout);
  }
  // do something
  ......
} finally{
 lock.unlock();
}

//method 释放锁
lock.lock()
try {
  // do something
 ......
 condition.signalAll();
} finally{
 lock.unlock();
}

实现阻塞队列

1个Lock、2个Condition(NotEmpty和NotFull)。入队结束后NotEmpty发出信号,出队结束后NotEmpty发出信号。

Dubbo同步转异步

DefaultFuture.java

get(int timeout)方法和doReceived(Response res)方法,可以看到使用Lock和Condition

Lock

Lock中有一个volatile标示到state,在获取锁和释放锁都会对volatile变量读写
根据happen-before特性
线程1-doSomething>线程1-unlock
线程1-unlock时会写state>线程2-lock时会读state(volatile变量写先于读)
线程1-doSomething>线程2-lock(根据前2个和happen-before传递性)
通过传递性和volatile变量写先于读,保证加锁后操作可见

相关文章

  • Java中实现异步转同步的几种方式

    Java中实现异步转同步的几种方式 Android常见的异步转同步的方式是通过Callback + Handler...

  • java 手写并发框架(一)异步查询转同步的 7 种实现方式

    序言 本节将学习一下如何实现异步查询转同步的方式,共计介绍了 7 种常见的实现方式。 思维导图如下: 异步转同步 ...

  • 实现异步转同步

    极客时间-《Java并发编程实战》学习笔记 异步方法:调用方法,在方法中启动子线程异步调用:启动子线程调用方法异步...

  • iOS 多线程基础

    转自:iOS 多线程基础 - 简书 多线程同步和异步的区别?IOS中如何实现多线程的同步? 异步:可以同时执行多条...

  • JS中同步心得

    不使用co模块 异步代码 2种方式 then 实现同步 async 实现同步 co模块实现同步(co+yield)...

  • 模拟异步函数

    异步函数实现机制(async.js) 实现了支持同步函数和异步函数的声明 声明异步函数 调用异步函数

  • 同步、异步和中断、轮询

    同步同步的实现方式有等待和轮询。 异步异步的实现方式是回调函数或通知(https://imageslr.com/2...

  • 参考dubbo实现异步转同步方案

    1. 需求背景 在支付系统中,因为上游通道的差异化,有时会出现这种情形: 上游提供的接口是异步的,即上游接收请求后...

  • 如何用管程实现异步转同步

    异步的本质是利用多线程提升性能,异步一定是基于一个新开的线程,从调用线程来看是异步的,但是从新开的那个线程来看,正...

  • 同步、异步、阻塞、非阻塞,这下明白了

    同步阻塞,同步非阻塞,异步阻塞,异步非阻塞... 晕! 头! 转! 向! 对于小白来说,理解这些概念太难了。搜索这...

网友评论

      本文标题:实现异步转同步

      本文链接:https://www.haomeiwen.com/subject/znluoqtx.html