资讯专栏INFORMATION COLUMN

并发编程中级篇二----并行设计模式----Future模式

lx1036 / 1336人阅读

摘要:模式类似于用户提交商品订单,下单成功以后后台异步的执行耗时的业务在包中接口是线程模式的实现,可以来进行异步计算。

Future模式
类似于用户提交商品订单,下单成功以后后台异步的执行耗时的业务
在java.util.concurrent包中.Future接口是Java线程Future模式的实现,可以来进行异步计算。

1.定义一个接口来处理请求

    public interface Data{
        String getRequest();
    }

2.定义一个转发请求的客户端

    public class FutureClient{
    
        public Data request(final String queryStr){
        
            //1.添加一个代理对象(Data接口的实现类) 先返回给发送请求的客户端 
            //告诉客户端收到请求,可以处理其他事情
            final FutureData futureData = new FutureData();
            //2.启动一个新的线程 去加载真实的数据 传递给这个代理对象
            new Thread(new Runnable(){
                public void run(){
                    //3这个新的线程可以去慢慢的加载真实对象 
                    //然后传递给代理对象
                    RealData realData = new RealData(queryStr);
                    futureData.setRealData(realData);
                }
            }).start();
            
            return futureData;
        }
        
    }

3.定义一个代理类来返回数据

    public class FutureData implements Data{
        
        private RealData realData;
        
        private boolean isReady = false;
        
        public void synchronized void setRealData(RealData realData){
            //如果已经转载完毕 直接返回
            if(iReady){
                return;
            }
            //如果没有装载,进行装载真实对象
            this.realData = realData;
            isReady = true;
            //进行通知
            notify();
            
        }
        
        public synchronized String getRequest(){
            //如果没有装载好 程序就一直处于阻塞的状态
            while(!isReady){
                try {
                    wait();
                } catch (InterruptedException e) {
                    e.printStackTrace();
                }
            }
            //装载好直接获取数据即可
            return this.realData.getRequest();
        }
    }

4.定义一个处理大量耗时操作的类

    public class RealData implements Data{
        
        private String result;
        
        public RealData(String queryStr){
            System.out.println("根据" + queryStr + "进行查询,
            这是一个很耗时的操作..");
            try {
                Thread.sleep(5000);
            } catch (InterruptedException e) {
                e.printStackTrace();
            }
            System.out.println("操作完毕,获取结果");
            result = "查询结果";
        }
        
        public String getRequest(){
            retun result;
        }
    }

5.定义一个测试类

    public class Main{
        
        public static void main(String[] args) throws InterruptedException {
            
            FutureClient fc = new FutureClient();
            Data data = fc.request("发送请求");
            System.out.println("请求发送成功!");
            System.out.println("做其他的事情...");
            
            String result = data.getRequest();
            System.out.println(result);
        
        }
    }

结果如下

文章版权归作者所有,未经允许请勿转载,若此文章存在违规行为,您可以联系管理员删除。

转载请注明本文地址:https://www.ucloud.cn/yun/70425.html

相关文章

  • 并发编程中级篇二----并行设计模式----Master-Wroker模式

    摘要:模式是常用的并行计算模式,它的核心思想是系统是由两类进程协助工作。负责接收和分配任务,负责处理子任务。当各个子进程处理完成后,会返回结果给,由做归纳和总结。其好处是能将一个大任务分解成若干个小任务,并行执行,从而提高系统的吞吐量。 Master-worker模式是常用的并行计算模式,它的核心思想是系统是由两类进程协助工作。Master负责接收和分配任务,worker负责处理子任务。当各...

    RebeccaZhong 评论0 收藏0
  • 并发编程中级篇三----并行设计模式----生产者-消费者模式

    摘要:生产者消费者模式是一个经典的多线程设计模式,它为多线程的协作提供了良好的解决方案。生产者消费者模式中的内存缓冲区的主要功能是数据在多线程间的共享。 生产者-消费者模式是一个经典的多线程设计模式,它为多线程的协作提供了良好的解决方案。在生产者-消费者模式中,通常有两类线程,即若干个生产者线程和若干个消费者线程。生产者线程负责提交用户请求,消费者线程负责处理用户请求。生产者和消费者之间通过...

    Aldous 评论0 收藏0
  • 并发编程 - 探索一

    摘要:并发表示在一段时间内有多个动作存在。并发带来的问题在享受并发编程带来的高性能高吞吐量的同时,也会因为并发编程带来一些意想不到弊端。并发过程中多线程之间的切换调度,上下文的保存恢复等都会带来额外的线程切换开销。 0x01 什么是并发 要理解并发首选我们来区分下并发和并行的概念。 并发:表示在一段时间内有多个动作存在。 并行:表示在同一时间点有多个动作同时存在。 例如:此刻我正在写博客,但...

    pcChao 评论0 收藏0
  • java并发编程学习14--CompletableFuture(一)

    摘要:并行流与目前,我们对集合进行计算有两种方式并行流而更加的灵活,我们可以配置线程池的大小确保整体的计算不会因为等待而发生阻塞。 【回顾Future接口 Future接口时java5引入的,设计初衷是对将来某个时刻会发生的结果建模。它建模了一种异步计算,返回了一个执行预算结果的引用。比如,你去干洗店洗衣服,店员会告诉你什么时候可以来取衣服,而不是让你一直在干洗店等待。要使用Future只需...

    VioletJack 评论0 收藏0
  • JVM并发编程模型览

    摘要:本文介绍和点评上的等并发编程模型。异步更适合并发编程。同步使线程阻塞,导致等待。基本模型这是最简单的模型,创建线程来执行一个任务,完毕后销毁线程。响应式编程是一种面向数据流和变化传播的编程模式。起源于电信领域的的编程模型。 本文介绍和点评JVM上的Thread, Thread Pool, Future, Rx, async-await, Fiber, Actor等并发编程模型。本人经验...

    cppowboy 评论0 收藏0

发表评论

0条评论

最新活动
阅读需要支付1元查看
<