多线程的设计模式:Future、Master-Worker

一 简介

并行设计模式属于设计优化的一部分,它是对一些常用的多线程结构的总结和抽象。与串行程序相比,并行程序的结构通常更为复杂,因此合理的使用并行模式在多线程开发中更具有意义,在这里主要介绍==Future==、==Master-Worker==和==生产者-消费者==模型

二 Future模式

Future模式有点类似于商品订单。比如在网购时,当看中某一件商品时,就可以提交订单,当订单处理完成后,在家等待商品送货上门即可。或者说更形象的,我们发送Ajax请求的时候,页面是异步的进行后台处理,用户无需一直等待请求的结果,可以继续浏览或操作其他内容。

public class Main {

    public static void main(String[] args) {
        FutureClient futureClient = new FutureClient();
        Date date = futureClient.request("date");
        System.out.println("请求已经被处理...");
        System.out.println("去做其他操作...");

        System.out.println("结果为:" + date.getRequest());
    }

}

public class FutureClient {

    public Date request(final String queryStr) {
        //1.想要一个代理对象(Date接口的实现类)先返回给发送请求的客户端,告诉她请求已经被接收到,可以做其他事情
        final FutureDate futureDate = new FutureDate();
        //2.启动一个新的线程,去加载真实数据,传递给这个代理对象
        new Thread(new Runnable() {
            @Override
            public void run() {
                //3.这个新的线程可以去加载真实对象,然后传递给代理对象
                RealDate realDate = new RealDate(queryStr);
                futureDate.setRealDate(realDate);
            }
        }).start();;
        return futureDate;
    }
}

public interface Date {

    String getRequest();
}

public class FutureDate implements Date{
    private RealDate realDate;
    private Boolean isReady = false;
    @Override
    public synchronized String getRequest() {
        while (!isReady) {
            try {
                //如果没有装载完毕,程序一直处于阻塞状态
                wait();
            } catch (InterruptedException e) {
                // TODO Auto-generated catch block
                e.printStackTrace();
            }
        }
        //装载好直接获取数据
        return this.realDate.getRequest();
    }

    public synchronized void setRealDate(RealDate realDate) {
        while (isReady) {
            //如果已经加载完毕,就直接返回
            return;
        }
        //如果没有,就进行装载真实对象
        this.realDate = realDate;
        this.isReady = true;
        //通知
        notify();
    }
}

public class RealDate implements Date{
    private String realDate;
    public RealDate(String realDate) {
        System.out.println("根据" + realDate + "进行查询,这是一个很耗时的操作...");
        try {
            Thread.sleep(5000);
        } catch (InterruptedException e) {
            // TODO Auto-generated catch block
            e.printStackTrace();
        }
        System.out.println("操作完毕,获取结果...");
        this.realDate = "查询结果";
    }
    @Override
    public String getRequest() {
        // TODO Auto-generated method stub
        return this.realDate;
    }
}

运行结果:

请求已经被处理...

去做其他操作...

根据date进行查询,这是一个很耗时的操作...

操作完毕,获取结果...

结果为:查询结果

三 Master-Worker模式

原文地址:https://www.cnblogs.com/zys-blog/p/9390160.html

时间: 2024-10-05 23:09:05

多线程的设计模式:Future、Master-Worker的相关文章

多线程08-Callable和Future

1.简介 Callable是一个接口,与Runnable类似,包含一个必须实现的call方法,可以启动为让另一个线程来执行,执行Callable可以得到一个Future对象 该对象可以监听Callable的执行结果 也可以取消该任务的执行 2.案例 package org.lkl.thead.foo; import java.util.concurrent.Callable; import java.util.concurrent.ExecutionException; import java.

大数据技术之_16_Scala学习_11_客户信息管理系统+并发编程模型 Akka+Akka 网络编程-小黄鸡客服案例+Akka 网络编程-Spark Master Worker 进程通讯项目

第十五章 客户信息管理系统15.1 项目的开发流程15.2 项目的需求分析15.3 项目的界面15.4 项目的设计-程序框架图15.5 项目的功能实现15.5.1 完成 Customer 类15.5.2 完成显示主菜单和退出软件功能15.5.3 完成显示客户列表的功能15.5.4 完成添加客户的功能15.5.5 完成删除客户的功能15.5.6 完善退出确认功能15.5.7 完善删除确认功能15.5.8 完成修改客户的功能第十六章 并发编程模型 Akka16.1 Akka 的介绍16.2 Acto

联想高级Java研发面经+面试题:Spring+多线程+MySQL+设计模式

上个礼拜,之前的一个同事突然联系我说他去面了联想的JAVA开发工程师,想分享一下面试经历和面试题.我当时就拍板说,好啊! 然后就整理了一下,写了这篇文章:和大家分享一下这次面试经验和面试题. 薪资还可以啊,年薪40W+啊!多少人的梦想啊! 言归正传,和大家分享一下这次联想的面经和面试题: 联想面经: 第一轮:电话初面 第二轮:技术面谈 第三轮:高管复试 第四轮:HR最后确认 No.1:第一轮面试--电话初面 首先确认对联想的意向度(如果异地更会考虑对工作地点(北京)的意向度!联想很看重这个):其

多线程设计模式 - Future模式

Future模式是多线程开发中非常常见的一种设计模式,它的核心思想是异步调用.这类似我们日常生活中的在线购物流程,带在购物网看着一件商品时可以提交表单,当订单完成后就可以在家里等待商品送货上门.或者说更形象的是我们发送Ajax请求的时候,页面是异步的进行后台处理,用户无需等待请求的结果,可以继续浏览或操作其他内容. 如上图所示,客户端调用购物请求,服务端程序不等数据处理完成便立即返回客户端一个伪造的数据,(相当于订单,而不是真实的商品)这时候由服务端自己偷偷摸摸的发送了一个other call(

多线程设计模式 - Future模式之JAVA实现

在之前一篇博客中介绍了Future设计模式的设计思想以及具体实现,今天我们来讲一下使用JDK原生的包如何实现. JDK内置的Future主要使用到了Callable接口和FutureTask类. Callable是类似于Runnable的接口,实现Callable接口的类和实现Runnable的类都是可被其他线程执行的任务.Callable接口的定义如下: public interface Callable<V> { /** * Computes a result, or throws an

转多线程设计模式 - Future模式之JAVA原生实现

在之前一篇博客中介绍了Future设计模式的设计思想以及具体实现,今天我们来讲一下使用JDK原生的包如何实现. JDK内置的Future主要使用到了Callable接口和FutureTask类. Callable是类似于Runnable的接口,实现Callable接口的类和实现Runnable的类都是可被其他线程执行的任务.Callable接口的定义如下: public interface Callable<V> { /** * Computes a result, or throws an

java多线程12设计模式

1.Single Threaded Execution Pattern(单线程运行模式) 2.Immutable Pattern(一成不变的模式) 3.Guarded Suspension Pattern(国防暂停模式) 4.Balking Pattern(止步模式,阻行模式) 5.Producer-Consumer Pattern(生产者-消费者模式) 6.Read-Write Lock Pattern(读-写锁模式) 7.Thread-Per-Message Pattern(每一个消息一个线

多线程的设计模式

并行设计模式属于设计优化的一部分,它是对一些常用的多线程结构的总结和抽象.与串行程序相比,并行结构的程序通常更为复杂.因此合理的使用并行模式在多线程开发中更具有意义,在这里主要介绍future.master-woeker和生产者-消费者模型. future模式有点类似于商品订单.比如在网购时,当看中某件商品时,就可以提交订单,当订单处理完成后,在家里等待商品送货上门即可.或者说更形象的我们发送Ajax请求的时候,页面是异步的进行后台处理,用户无需一直等待用户请求的结果,可以继续浏览或操作其他内容

Java多线程编程中Future模式的详解&lt;转&gt;

Java多线程编程中,常用的多线程设计模式包括:Future模式.Master-Worker模式.Guarded Suspeionsion模式.不变模式和生产者-消费者模式等.这篇文章主要讲述Future模式,关于其他多线程设计模式的地址如下:关于其他多线程设计模式的地址如下:关于Master-Worker模式的详解: Java多线程编程中Master-Worker模式的详解关于Guarded Suspeionsion模式的详解: Java多线程编程中Guarded Suspeionsion模式