iis服务器助手广告广告
返回顶部
首页 > 资讯 > 后端开发 > Python >Java多线程之Future设计模式
  • 151
分享到

Java多线程之Future设计模式

2024-04-02 19:04:59 151人浏览 安东尼

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

摘要

目录Future -> 代表的是未来的一个凭据AsynFuture -> Future具体实现类FutureService -> 桥接Future和FutureTa

Future -> 代表的是未来的一个凭据


public interface Future<T> {
    T get() throws InterruptedException;
}

AsynFuture -> Future具体实现类


public class AsynFuture<T> implements Future<T> {

    private volatile boolean done = false;

    private T result;

    public void done(T result){
        synchronized (this){
            this.result = result;
            this.done = true;
            this.notifyAll();
        }
    }
    
    @Override
    public T get() throws InterruptedException {
        synchronized (this) {
            while (!done) {
                this.wait();
            }
        }
        return result;
    }
}

FutureService -> 桥接Future和FutureTask


public class FutureService {

    
    public <T> Future<T> submit(final FutureTask<T> task) {

        AsynFuture<T> asynFuture = new AsynFuture<>();

        new Thread(() -> {

            T result = task.call();
            asynFuture.done(result);

        }).start();
        return asynFuture;
    }

    
    public <T> Future<T> submit(final FutureTask<T> task, final Consumer<T> consumer) {

        AsynFuture<T> asynFuture = new AsynFuture<>();
        new Thread(() -> {
            T result = task.call();
            asynFuture.done(result);
            consumer.accept(result);
        }).start();
        return asynFuture;
    }
}

FutureTask -> 将你的调用逻辑进行了隔离


public interface FutureTask<T> {

    T call();
}

需要时回调:



public class SyncInvoker {

    public static void main(String[] args) throws InterruptedException {

        FutureService futureService = new FutureService();
        Future<String> future = futureService.submit(() -> {
            try {
                Thread.sleep(10001);
            } catch (InterruptedException e) {
                e.printStackTrace();
            }
            return "FINISH";
        });

        System.out.println("==============");
        System.out.println("do other thing.");
        Thread.sleep(1000);

        System.out.println("==============");

        
        System.out.println(future.get());
    }
}

运行:

==============
do other thing.
==============
FINISH

运行完自动回调:


/
public class SyncInvoker {

    public static void main(String[] args) throws InterruptedException {

        FutureService futureService = new FutureService();
        futureService.submit(() -> {
            try {
                Thread.sleep(10001);
            } catch (InterruptedException e) {
                e.printStackTrace();
            }
            return "FINISH";
        },System.out::println);

        System.out.println("==============");
        System.out.println("do other thing.");
        Thread.sleep(1000);
        System.out.println("==============");
    }
}

到此这篇关于Java多线程之Future设计模式的文章就介绍到这了,更多相关Java多线程 Future内容请搜索编程网以前的文章或继续浏览下面的相关文章希望大家以后多多支持编程网!

--结束END--

本文标题: Java多线程之Future设计模式

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

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

本篇文章演示代码以及资料文档资料下载

下载Word文档到电脑,方便收藏和打印~

下载Word文档
猜你喜欢
  • Java多线程之Future设计模式
    目录Future -> 代表的是未来的一个凭据AsynFuture -> Future具体实现类FutureService -> 桥接Future和FutureTa...
    99+
    2024-04-02
  • Java多线程中Future设计模式怎么用
    这篇文章将为大家详细讲解有关Java多线程中Future设计模式怎么用,小编觉得挺实用的,因此分享给大家做个参考,希望大家阅读完这篇文章后可以有所收获。Future -> 代表的是未来的一个凭据public interfac...
    99+
    2023-06-25
  • Java多线程之读写锁分离设计模式
    主要完成任务: 1.read read 并行化 2.read write 不允许 3.write write 不允许 public class Rea...
    99+
    2024-04-02
  • Java多线程 Guarded Suspension设计模式
    目录1.Guarded Suspension模式的结构2. Guarded Suspension模式的简单实现前言: Guarded Suspension意为保护暂停,其核心思想是仅...
    99+
    2024-04-02
  • Java的Future多线程模式怎么使用
    本篇内容介绍了“Java的Future多线程模式怎么使用”的有关知识,在实际案例的操作过程中,不少人都会遇到这样的困境,接下来就让小编带领大家学习一下如何处理这些情况吧!希望大家仔细阅读,能够学有所成!在Java5后,提供了大量处理多线程的...
    99+
    2023-06-17
  • Java多线程 Producer and Consumer设计模式
    目录 producer是生产者的意思:指生产数据的线程, consumer是消费者的意思:指的是使用数据的线程 public class ProducerThr...
    99+
    2024-04-02
  • Java多线程之Worker Thread模式
    目录一.Worker Thread模式二   .Worker Thread模式中的角色1.Client(委托者)2.Channel(通信线路)3.Worker(工...
    99+
    2024-04-02
  • 多线程中Future模式的详细介绍
    本篇内容介绍了“多线程中Future模式的详细介绍”的有关知识,在实际案例的操作过程中,不少人都会遇到这样的困境,接下来就让小编带领大家学习一下如何处理这些情况吧!希望大家仔细阅读,能够学有所成!在高性能编...
    99+
    2024-04-02
  • java设计模式:建造者模式之生产线
    目录什么是建造者模式建造者模式中的角色产品角色(Product)抽象建造者(Builder)具体建造者角色(ConcreteBuilder)导演者角色(Director)最终测试总结...
    99+
    2024-04-02
  • Java多线程如何使用Guarded Suspension设计模式
    这篇文章主要介绍“Java多线程如何使用Guarded Suspension设计模式”,在日常操作中,相信很多人在Java多线程如何使用Guarded Suspension设计模式问题上存在疑惑,小编查阅了各式资料,整理出简单好用的操作方法...
    99+
    2023-06-25
  • Java多线程 Callable、Future 和FutureTask
    目录1 Callable介绍2 Future介绍2.1 在Future接口中声明方法2.2 Future提供了三种功能3 FutureTask4 Future和FutureTask的...
    99+
    2024-04-02
  • java多线程之Balking模式介绍
    Balk有拒绝,阻碍的意思。如果现在不适合执行这个操作,或者没必要执行这个操作,就停止处理,直接返回。这就是Balking模式。 Balking 模式可以和Guarded Suspe...
    99+
    2024-04-02
  • Java设计模式之单例模式
    目录什么是设计模式?单例模式是什么?单例模式设计的原则是什么?Java实现单例模式的5种方式?懒汉饿汉静态内部类双重校验锁DCL(Double Check Lock)枚举(num)总...
    99+
    2024-04-02
  • Java设计模式之策略模式
    在一个收银系统中,如果普通用户、中级会员、高级会员分别对应着不同的优惠策略,常规编程就要使用一系列的判断语句,判断用户类型,这种情况下就可以使用策略模式。 一、概念理解 策略模式的概...
    99+
    2022-11-13
    Java 设计模式 策略模式
  • Java设计模式之桥接模式
    本文通过老王和小王买车,引出设计模式中的结构型设计之桥接模式,接着说明设计型模式的概念和代码实现,为了加深理解,会说明适配器设计模式在JDBC中的应用,最后谈谈桥接模式和适配器模式的...
    99+
    2024-04-02
  • Java设计模式之外观模式
    本文通过老王改造小王公司的整体架构来说明外观模式,所谓的外观模式其实就是在各种复杂的子系统中抽象出来一个接口,隐藏具体的实现细节,调用方调用时只需要调用接口即可。为了加深理解我们会选...
    99+
    2024-04-02
  • Java设计模式之状态模式
    实际开发中订单往往都包含着订单状态,用户每进行一次操作都要切换对应的状态,而每次切换判断当前的状态是必须的,就不可避免的引入一系列判断语句,为了让代码更加清晰直观,我们引入今天的主角...
    99+
    2022-11-13
    Java 设计模式 状态模式
  • Java设计模式之享元模式
    本文通过优化买票的重复流程来说明享元模式,为了加深对该模式的理解,会以String和基本数据类型的包装类对该模式的设计进一步说明。 读者可以拉取完整代码到本地进行学习,实现代码均测试...
    99+
    2024-04-02
  • Java设计模式之命令模式
    本文通过解决老王经常搞错借书人的问题,来引出行为型模式中的命令模式。为了在案例之上理解的更加透彻,我们需要了解命令模式在源码中的应用。最后指出命令模式的应用场景和优缺点。 读者可以拉...
    99+
    2024-04-02
  • Java设计模式之代理模式
    本文由老王出租房子引出——代理设计模式,将从最简单的静态代理实现开始,后延伸使用jdk实现动态代理,最后扩展到Cglib实现动态代理。为了更深入理解代理模式,...
    99+
    2024-04-02
软考高级职称资格查询
编程网,编程工程师的家园,是目前国内优秀的开源技术社区之一,形成了由开源软件库、代码分享、资讯、协作翻译、讨论区和博客等几大频道内容,为IT开发者提供了一个发现、使用、并交流开源技术的平台。
  • 官方手机版

  • 微信公众号

  • 商务合作