并发学习--Future机制核心

【Java】Java的Future机制详解 阅读详情
package com.example.demo.AQS;

import java.util.concurrent.Callable;
import java.util.concurrent.ExecutorService;
import java.util.concurrent.Executors;

/**
 * @program: demo
 * @description: future
 * @author: 郭雄帅
 * @create: 2021-01-27 09:56
 */
public class FutureDemo {

    static ExecutorService  executors= Executors.newScheduledThreadPool(2);
    public static void main(String[] args) {
        Callable<String> callable = new Callable<String>() {
            @Override
            public String call() throws Exception {
                return "lalala";
            }
        };

        JackFuture<String> futureTask = new JackFuture<>(callable);
        new Thread(futureTask).start();
        System.out.println(futureTask.getResult());
    }
}

下面的代码参考java.util.concurrent.FutureTask源码

package com.example.demo.AQS;

import java.util.concurrent.Callable;
import java.util.concurrent.LinkedBlockingQueue;
import java.util.concurrent.locks.LockSupport;

/**
 * @program: demo
 * @description:FutureTask的核心思想
 * @author: 郭雄帅
 * @create: 2021-01-27 09:57
 */
public class JackFuture<T> implements Runnable{
    private Callable<T> callable;
    T result;
    volatile String status = "NEW";
    LinkedBlockingQueue<Thread> queue = new LinkedBlockingQueue<>();
    public JackFuture(Callable<T> callable) {
        this.callable = callable;
    }

    public T getResult() {//阻塞,run方法执行完毕之后
        System.out.println("执行get");
        if ("END".equals(status)){

            return result;
        }
        while (!"END".equals(status)){//run未完成,执行阻塞
            //准备一个容器,存放线程
            queue.offer(Thread.currentThread());
            LockSupport.park();
        }

        return result;
    }

    @Override
    public void run() {
        try {
            System.out.println(Thread.currentThread().getName()+"+执行run");
            result = callable.call();
        } catch (Exception e) {
            e.printStackTrace();
        }finally {
            status="END";
        }
        Thread thread = queue.poll();
        while (thread!=null){
            LockSupport.unpark(thread);
            thread = queue.poll();//直到全部取出,结束循环
        }
    }
}

```又学到了!

第十四篇:Python异步IO编程(asyncio)核心原理解析 本文深入解析Python异步编程的核心机制,重点介绍协程、事件循环和Future/Task三大要素。异步编程通过单线程处理高并发I/O操作,相比同步模型显著提升性能。文章详细演示了协程的创建与运行方式,剖析了事件循环的工作流程,并对比了Future和Task的关系。特别针对面试高频问题,深入分析了asyncio.run()的内部执行机制,包括事件循环的创建、协程调度和资源清理过程。通过具体代码示例,帮助开发者掌握异步编程的核心概念和实际应用技巧。 阅读详情

相关推荐

Java多线程之异步Future机制的原理和实现

主要为大家详细介绍了Java多线程之异步Future机制的原理和实现,感兴趣的小伙伴们可以参考一下

Java并发编程之异步Future机制的原理和实现

Java并发编程之异步Future机制的原理和实现           项目中经常有些任务需要异步(提交到线程池中)去执行,而主线程往往需要知道异步执行产生的结果,这时我们要怎么做呢?用runnable是无法实现的,我们需要用callable看下面的代码: Java代码  import java.util.concurrent.Callable;   impo

莫名的拉风的博客 1万+

C#实战:基于ONNX与SCRFD/ArcFace的高效人脸识别系统开发

本文详细介绍了如何在C#环境中,利用ONNX Runtime高效部署SCRFD人脸检测与ArcFace人脸识别模型,构建一个完整的、高性能的人脸识别系统。内容涵盖环境搭建、模型推理、人脸对齐、特征提取等核心模块,并提供了从Demo到生产系统的优化思路与实战代码,为.NET开发者提供了一套开箱即用的解决方案。

weixin_29061821的博客 488

Java并发编程:Callable、Future和FutureTask

Java并发编程:Callable、Future和FutureTask   在前面的文章中我们讲述了创建线程的2种方式,一种是直接继承Thread,另外一种就是实现Runnable接口。   这2种方式都有一个缺陷就是:在执行完任务之后无法获取执行结果。   如果需要获取执行结果,就必须通过共享变量或者使用线程通信的方式来达到效果,这样使用起来就比较麻烦。   而自从Java ...

weixin_30621919的博客 2022

PyTorch、Torchvision、Torchaudio历史版本whl文件下载地址、版本对应关系与离线安装全攻略

本文详细解析了PyTorch、Torchvision和Torchaudio历史版本whl文件的下载地址、版本对应关系及离线安装全攻略。针对无网络环境下的安装挑战,提供了官方whl文件获取路径、版本匹配技巧和完整安装流程,帮助开发者高效解决兼容性问题,确保深度学习环境的稳定部署。

weixin_31960565的博客 378

Stata中介效应分析实战:从sgmediation安装到Sobel检验结果解读

本文提供了Stata中进行中介效应分析的完整实战指南,重点介绍了第三方命令sgmediation的安装、配置与使用。通过详细案例演示了如何运用Sobel检验分析变量间的间接效应,并深入解读检验结果,帮助研究者厘清自变量影响因变量的具体路径。文章还探讨了Sobel检验的原理、优缺点及结果报告规范,是进行实证研究的实用参考。

weixin_29197051的博客 630

pthread异步_Java异步任务Future模式源码分析

我们为什么要学习Future模式大型分布式系统当中,利用Future模式来解决高并发的问题是相当常见的,举几个例子:1.Guava中的SettableFuture,Spring中的ListenableFuture(Guava中也有),我们可以实现自动监控异步任务的运行结果并异步处理结果。从而提高CPU的利用率,有效得完成系统任务的调度。2.Dubbo中的异步实现dubbo异步调用原理Dubbo的异...

weixin_39563722的博客 95

立项书8分钟定生死?手把手教你用ChatGPT辅助打造高水平申报书,让评审专家一看就想打高分!

宏大叙事、空话堆砌只会让评审绕晕,不如聚焦一个具体问题,拿出清晰的研究路径、扎实的设计方案,把“我想做什么、为什么做、打算怎么做”讲明白。对评审来说,关键不在你读了多少,而在你能否看清领域的共识、争议和空白,GPT的作用就在于帮你理清研究脉络,发现问题结构,聚焦那些还没被充分讨论的变量或方法,去提升综述的深度。之前要用到ProcessOn、Draw.io等工具画流程图,现在有了ai虽然方便了,但也需要多次调教,如果嫌麻烦,七哥给大家准备了课题申报常用的流程图,技术路线图,方便大家直接拿来编辑填空使用。

智能AI让学术科研更容易 291

如何快速掌握Python异步编程:asyncio.Future完整指南

Python异步编程是现代开发中不可或缺的重要技能,而asyncio.Future对象是实现高效异步操作的核心组件。本文将为您全面解析asyncio.Future的用法、优势以及实际应用场景,帮助您快速掌握这一强大的异步编程工具。 ## 什么是asyncio.Future对象? 🤔 asyncio.Future是Python异步编程中的一个重要概念,它代表了一个尚未完成的计算结果。简单来说,

gitblog_00828的博客 913

Android16 3576 u盘固件升级功能添加

1.在u-boot/drivers/power/pmic/rk8xx.c。这里是读取power键的寄存器判断长短按。

tzj1058756809的博客 575

结构光相移法-多频外差原理与实践

结构光相移法是一种常用的三维形貌测量技术,它通过对投射到目标物体上的结构光进行相位调制和解调,实现对物体表面的三维重建。其中,多频外差原理是结构光相移法的核心原理之一,通过使用不同频率的结构光来实现相位测量,并可以提高测量精度和抗干扰性能。结构光相移法的多频外差原理是一种常用的三维形貌测量技术,它通过使用多个不同频率的结构光进行相位调制和解调,实现对物体表面的三维重建。本文介绍了多频外差原理的原理和实践应用,并提供了相应的Python源代码,希望对读者理解和应用结构光相移法有所帮助。

CodeByte的博客 737

Java 并发编程学习总结

什么是并发编程,简单来说就是为了充分利用cpu,多个任务同时执行,快速完成任务。 并发编程相关的概念和技术看上非常零散,相关度也很低,想要学习好并发编程,可以从下面两方面入手:一是建立全景图,从细节“跳出来,看全景”,另一个是深挖细节,也就是“钻进去,看本质”。 其实不止是并发编程的学习,任何的知识的学习都是一样的。在学习的时候,要充分利用网上已有的知识体系,比如计算机网络的分层,没必要自己再去重新分层。对于网上没有的知识体系,自己要学会进行抽象和总结,建立方便自己理解的全景图。 对于并发编程领域,借

HongYu012的博客 311

黑猫带你学eMMC协议第26篇:eMMC的硬件复位操作(H/W reset)

本文依据eMMC JEDEC5.1及个人工作经验整理而成,如有错误请留言。 文章为个人辛苦整理,付费内容,禁止私自转载。 文章所在专栏:《黑猫带你学:eMMC协议详解》 1 概述 什么是硬件复位? 硬件复位就是使用一个特殊硬件信号(这个信号在RST_n这根实实在在的物理线路上传输)将emmc复位到pre-idle state,而不需要使用cmd0或者power cycle讲emmc复位到pre-idle state。 如何进行硬件复位? 1、设置RST_n_FUNCTION [162]为1,使emm.

黑猫奥利奥的博客 6318

Semgrep:一条像源码的 pattern,把安全扫描做进多语言仓库

当仓库里 Python、Go、TypeScript 混着写,人工 review 已经兜不住安全漏洞时,Semgrep 是目前少有的语义级静态扫描工具:规则直接按源码写,不用正则,适合想把安全扫描卡进 pre-commit 和 CI 的团队。 ## 人工 review 兜不住 15 个仓库的安全问题 你负责的业务从 3 个仓库涨到 15 个,语言从 Python 扩到 Go 和 TypeScri

gitblog_01143的博客 672

[自动化工具] 解放双手的利器:「自动邮件平台」工具助你高效搞定重复通知任务

摘要:自动邮件平台是一款零门槛自动化工具,帮助用户高效处理重复性邮件任务。该平台支持两种调度模式(指定日期和间隔天数),无需编码即可快速设置账单提醒、活动通知等任务。提供免费托管版(小时级调度)和自主部署版(分钟级调度),满足不同精度需求。典型应用场景包括客户跟进、系统监控等周期性任务。用户只需三步即可完成设置,还能扩展定制化功能。该工具让非技术人员也能轻松实现邮件自动化,释放时间专注更重要的工作。

每日出拳老爷子的博客 109

visio安装包

Microsoft Office Visio 是一款专业的制图软件。利用经过更新的形状、协作工具和数据链接图表,创建专业级图表以简化复杂的信息。

炸裂!GitHub标星百万的并发编程手册(彩图版),颠覆了我以往“正确“的认知

对于一个Java程序员而言,能否熟练掌握并发编程是判断他优秀与否的重要标准之一。因为并发编程是Java语言中最为晦涩的知识点,它涉及操作系统、内存、CPU、编程语言等多方面的基础能力,更为考验一个程序员的内功。那到底应该怎么学习并发编程呢?Java SDK的并发工具包有很多,是要死记硬背每一个工具的优缺点和使用场景吗?当然不是,想要学好并发编程,你需要从一个个单一的知识和技术中“跳出来”,高屋建瓴地看问题,并逐步建立自己的知识体系。

m0_73311735的博客 89

假人有限元模型

假人模型,车辆碰撞假人有限元模型,适合做乘员安全的研究者利用

呸 渣男!八股文不让看,非得让看并发编程全彩图册,这下又进厂了

我不知道你有没有发现,很多Java 的高级知识点,其实在我们平时的工作中,用到的场景并不是很多。这样下来就造成了一个知识漏洞的现象,自己平时在工作中表现和成绩都是不错的,但是在没有进行复习、准备的情况下出去 裸 面 ,则可能导致一个问题发生,那就是--经过面试官的连环炮攻击之后,给到的评价是此人业务精通,但是基础太差,对于该职位不匹配。

m0_57042151的博客 106

复分析 阿尔福斯(Ahlfors) 第三版答案 英文

答案分为十章,有部分习题没有答案,全英文复分析阿尔福斯(Ahlfors) 第三版答案

C# WinForm 基于DirectShow.dll编写的程序,可边预览边保存视频,音频和图片

基于微软的DirectShow.dll的二次开发1.自动识别连接的摄像头跟麦克风且可以对其进行选择(默认选中第一个)2.可录制wmv和avi两种格式的视频并且都带有音频,avi可以录制的分辨率和帧数进行选择,wmv默认进行了淸晰度优化如不喜欢可去除代码中有相关提示3.可在预览点开之后进行拍照,也可边录制视频边拍照4.添加了视频和音频的压缩功能(酌情使用)这次二次开发发现C#对DirectShow的相关信息太少,这次做完也不敢藏私共享出来,还望大家指正

Java JUC学习笔记

一、JUC简介 在 Java 5.0 提供了 java.util.concurrent(简称JUC)包,在此包中增加了在并发编程中很常用的工具类,用于定义类似于线程的自定义子系统,包括线程池,异步 IO 和轻量级任务框架;还提供了设计用于多线程上下文中的 Collection 实现等 JUC 简介 二、volatile Java中volatile关键字的最全总结 ...

Liuqz2009的专栏 290

Java小白如何快速入手并发编程?

不知道大家今年是否有出去面试过?有出去面试的朋友肯定深有感受,像我们刚入行那会面试的加分项现在卷得已经成为了面试的基础题(手动狗头)。其中最典型的就属这个Java并发编程了。之前一般只有大厂才会有高并发编程相关的面试内容,但现在只要你入了Java行业就会涉及,不管你工作中是否用到,面试就得问。

weixin_50205273的博客 334

《Scala 学习手册》核心内容详解

本书不是一本单纯的 Scala 语法入门教程,而是一本系统讲解 “如何用函数式思维,编写高效、可扩展、安全的面向对象代码” 的实战指南。全书的核心逻辑线索,是 “Scala 的语法特性,如何支撑函数式编程与面向对象编程的融合,进而支撑高并发、大数据场景的工程级落地”;所有的语法讲解、特性分析、实战案例,都是围绕这一核心线索展开的。多范式融合,兼顾面向对象与函数式双重优势。

hopsky的博客 241

男默女泪!Alibaba 内部强推 JDK 源码学习指南笔记上线 2 天 Github 已星标 37k

JDK 源码 大家都知道,源码这个东西面试跑不掉工作上还得去学习其中思想跟设计模式,真正喜欢看源码的多半有点“变态”。这玩意催眠又晦涩难懂,看了也会忘,需要先一点点针对某个组件或者某部分去看,一口吃不成大胖子! 就拿 JDK 源码来说,它是个类库,加入了很多辅助代码、泛型、以及一些设计模式上的考量,没有方法毫无头绪的去看没多会你就会晕头转向!这时站在巨人的肩膀上学习无疑会省很多力气。今天 LZ 就把前段时间阿里一位老哥私授我的 JDK 源码学习指南分享出来给大家,希望对大家有所帮助! 这份 ..

m0_59090040的博客 181

并发编程学习链接

Java中的并发库学习总结  http://blog.youkuaiyun.com/jiangwei0910410003/article/details/20373497

wym1581的专栏 300

【并发编程】Java的Future机制详解(Future接口和FutureTask类)

Java的Future机制详解

小七的博客 1万+

C++并发编程实践:深入理解Future机制

在现代C++并发编程中,Future机制是一种非常重要的异步编程工具。本文将深入探讨`std::future`、`std::shared_future`及其相关组件,帮助开发者掌握这一强大的并发编程工具。 ## Future核心概念 ### 什么是Future? `std::future`是C++11引入的一个模板类,它提供了一种访问异步操作结果的机制。简单来说,Future就像一个"承诺"...

gitblog_00403的博客 584

Java的Future机制详解

B图表达的是使用Future模式之后,我们主线程在invoke之后可以立即返回,去做其他的事情,回头再来看看刚才提交的invoke有没有结果。而如果使用第二个构造函数那么最后获取线程实行结果就是参数中的result,接下来让我们看一下FutureTask的run方法。方法能准确地告诉你某个字段相对于对象的起始内存地址的字节偏移量,因为是相对偏移量,所以它其实跟某个具体对象又没什么太大关系,跟class的定义和虚拟机的内存模型的实现细节更相关。get方法有两个,一个是有超时时间设置,另一个没有超时时间设置。

u013950690的博客 3987

Future与Promise详解,彻底搞懂Scala异步编程核心机制

掌握Scala并发编程核心,深入解析Future与Promise异步机制。涵盖回调组合、异常处理及线程调度,适用于高并发场景下的非阻塞编程。显著提升系统响应性与资源利用率,彻底搞懂异步编程精髓,值得收藏。

FuncTide的博客 510
上一篇: ThinkPad X1Carbon 使用VMware打开虚拟机报错Intel VT-x
下一篇: sqlserver数据库查询两个日期之间的日期列表
ARSLYN
博客等级 码龄10年 2粉丝 12原创
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

个

红包个数最小为10个

元

红包金额最低5元

当前余额3.43元 前往充值 >
需支付:10.00元
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付元
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值