首页 > 编程语言 >JUC并发编程

JUC并发编程

时间:2024-11-26 12:30:25浏览次数:10  
标签:JUC Runnable 创建 编程 接口 Callable 并发 线程 FutureTask

JUC并发编程

Callable接口

  1. 是什么
    1. 创建线程的方法:一种是通过继承Thread类创建,另一种是通过使用Runnable创建线程
    2. 但是Runnable缺少一项功能,当线程终止时(run()结束时),无法使线程返回结果
    3. 为了使得线程结束后能够返回结果,Java提供了Callable接口
    4. 通过Callable接口来创建线程可以有返回值Callable接口创建线程可以有返回值
    5. Callable接口有返回值,Runnable接口没有返回值
    6. Callable接口会抛出异常,Runnable接口不会抛出异常
    7. Callable接口使用call()创建线程并返回结果Runnable接口使用run()实现创建线程
  2. Callable创建线程
    1. 实现Callable接口,重写内部的 call() 方法,会返回结果
    2. Runnable接口创建线程是将一个Runnable接口的实现类对象作为参数传入到Thread来创建线程
    3. 但Callable接口和Runnable接口创建线程的形式不一样,此时应该找一个类,既和Runnable有关系,又和Callable有关系
    4. 此时可以通过Runnable接口的FutureTask实现类来根据Callable接口创建线程
    5. 使用Callable接口创建的线程可以获得结果
    6. Callable接口不可以直接替代Runnable接口作为参数传入Thread,此时需要找FutureTask实现类(Runnable接口实现类)作为中介传入Callable接口实现类来创建线程
  3. FutureTask实现类
    1. FutureTask类是Runnable接口的实现类,在创建时可以传入Callable接口的实现类
    2. 创建FutureTask类时可以传入Callable接口实现类,此时通过call()方法来执行线程的操作并返回结果
    3. 可以直接使用lambda表达式来声明函数式接口,故FutureTask类可以获得线程返回的结果
    4. FutureTask原理
      1. 开启一个线程去完成某个任务,然后可以获得任务结果
      2. 可以通过Callable接口实现类来创建FutureTask对象
      3. 使用FutureTask单开一个线程执行某些操作,然后主线程继续执行,过一段时间后获得FutureTask线程的结果
      4. FutureTask只需要汇总一次,即只需要获得一次结果就可以
    5. FutureTask创建线程
      1. 传入Callable接口的实现类,或者使用lambda表达式来创建FutureTask对象
      2. 此时创建线程后就会执行重写的call()函数中的操作,并可以通过FutureTask对象来获得函数执行的结果
      3. 先传入Callable接口实现类(可以lambda表达式)来创建一个FutureTask对象,然后再创建线程Thread时传入创建的FutureTask对象,此时创建的线程就会执行call()中的操作,然后通过FutureTask对象获得结果
      4. 使用FutureTask时只会执行一次call()中的操作,第二次获得结果时就直接返回,不会再执行线程

标签:JUC,Runnable,创建,编程,接口,Callable,并发,线程,FutureTask
From: https://blog.csdn.net/LiuYQi/article/details/144002418

相关文章

  • Python_异步编程-并发编程-协程和future
    操作系统创建线程Unix进程的设计思想,实现了forkexecwaitexit四个精巧的系统调用来支持对进程的灵活管理。父进程进程通过fork系统调用创建自身的副本(子进程);称为“子进程”的副本可调用exec系统调用用另一个程序覆盖其内存空间,这样就可以执行新程序了;......
  • 请解释下你理解的并行和并发、同步和异步、阻塞和非阻塞之间有什么区别?
    在前端开发中,理解并行、并发、同步、异步、阻塞和非阻塞这些概念至关重要,它们会影响代码的执行效率和用户体验。以下是对这些概念的解释以及它们之间的区别:1.并行与并发:并行(Parallelism):指的是多个任务同时执行。这需要多核处理器,每个核处理一个任务。想象一下多条高速公......
  • 实现异步编程有哪些方式?推荐用哪种?
    前端开发中实现异步编程的方式主要有以下几种:回调函数(Callbacks):这是最基础的异步编程方式。一个函数作为参数传递给另一个函数,并在异步操作完成后被调用。优点:简单易懂,容易上手。缺点:容易陷入“回调地狱”(嵌套过多的回调函数,导致代码难以阅读和维护)。错误处理也......
  • 嵌入式开发之UDP网络编程
    1、TCP编程的函数API1.1、网络发送数据:send()/write()#include<sys/types.h>#include<sys/socket.h>ssize_tsend(intsockfd,constvoid*buf,size_tlen,intflags);#include<unistd.h>ssize_twrite(intfd,constvoid*buf,size_tcount);send()比write多......
  • Shell脚本编程基础
    一、构建基本脚本1.1使用多个命令两个命令一起运行,放在同一行,用;隔开,例如pwd;ls1.2创建shell脚本在创建shell脚本文件时,必须在文件的第一行指定要使用的shell。其格式为:#!/bin/bash井号(#)用作注释行。shell并不会处理shell脚本中的注释行。然而,shell脚本文件的第一行是......
  • 《JAVA编程思想》第四版 PDF 下载 中文版和英文版 高清PDF扫描带书签
     转载自:https://www.cnblogs.com/buwuliao/p/8073211.html非常感谢也可见:https://www.cnblogs.com/ChaoJieLiu/p/12910447.html一、链接:中文版+英文版+思维导图:链接:https://pan.baidu.com/s/1bmgOdC7gFhI4Waac6JV4Wg提取码:s3vc复制这段内容后打开百度网盘手机App,操作更方......
  • JavaScript 编程精解(Eloquent)第四版·翻译完成
    JavaScript编程精解(Eloquent)第四版第一章:引言第一部分:语言第二章:值、类型和运算符第三章:程序结构第四章:函数第五章:数据结构:对象和数组第六章:高阶函数第七章:对象的秘密生活第八章:项目:一个机器人第九章:漏洞和错误第十章:正则表达式第十一章:模......
  • [编程笔记] 系统日期格式引起的bug
    系统获取的日期格式不对,导致程序出现异常,出现过多次了,这里记录一下。起因是测试说某个跟日期相关的活动,在他环境里失效,而我们开发本地测试了多遍都是正常的,这就很奇怪了,有种想给他重装系统的念头,哈哈。经过一系列的分析和排查,发现是他本地系统设置的日......
  • 幼儿编程启蒙、幼儿实物编程
    幼儿编程启蒙乐园第一集幼儿编程启蒙乐园第一集_哔哩哔哩_bilibili幼儿编程启蒙乐园幼儿编程启蒙乐园_哔哩哔哩_bilibili3-6岁线上实物编程3-6岁线上实物编程-网易云课堂3-6岁线上实物编程-学习视频教程-腾讯课堂适合低年龄孩子的儿童实物编程来了!适合低......
  • Go进阶21:Goland 6条Tips让编程更有效率
    作为一个重度使用JetbrainsIDE全家桶的用户.这里我有几条可以加速您开发速度,减少您Paste/Copy敲打键盘的Tips.1.快速实现Interface操作步骤:光标移动到struct名称上Alt/Option+Enter选择ImplementInterface…Control+I搜索您需要实现的interface2.快速抽象I......