当前位置: 首页 > news >正文

Java实现异步开发的方式

 1)、继承 Thread
  2)、实现 Runnable 接口
 3)、实现 Callable 接口 + FutureTask (可以拿到返回结果,可以处理异常)
 4)、使用线程池

 区别:1、2)不能得到返回值
           3)可以获得返回值
           但1、2、3都不能控制资源,会造成系统资源浪费
           只有4)可以控制资源,优点是性能稳定

所以在在业务代码开发中,1、2、3)启动线程的方式都不用,应该将所有的多线程异步任务交给线程池来执行。

示例代码:

public class ThreadTest {public static ExecutorService executorService= Executors.newFixedThreadPool(10);public static void main(String[] args)throws Exception {System.out.println("main start.........");//一.extends Thread
//        Thread01 thread01=new Thread01();
//        new Thread(thread01).start();//二.implements Runnable
//        Runnable01 runnable01=new Runnable01();
//        new Thread(runnable01).start();//三.implements Callable
//        FutureTask<Integer> futureTask=new FutureTask<>(new Callable01());
//        new Thread(futureTask).start();
//        //futureTask.get方法会阻塞直到拿到结果
//        Integer result =  futureTask.get();
//        System.out.println("main end........."+result);//四.使用线程池的方式实现异步编程executorService.execute(new Runnable01());}public static class  Thread01 extends Thread{public void run(){System.out.println("当前线程:"+Thread.currentThread().getId());Integer i=10/2;System.out.println("运算结果.........:"+i);}}public static class Runnable01 implements Runnable{@Overridepublic void run() {System.out.println("当前线程:"+Thread.currentThread().getId());Integer i=10/2;System.out.println("运算结果.........:"+i);}}public static class Callable01 implements Callable<Integer>{@Overridepublic Integer call() throws Exception {System.out.println("当前线程:"+Thread.currentThread().getId());Integer i=10/2;System.out.println("运算结果.........:"+i);return i;}}
}

线程池执行有2个方法,分别是execute()和submit(),它们的区别是submit方法执行会有返回值,而,execute()方法无返回值,exeucte()只能接收实现Runnable的类,而submit可接收实现Runnable或Callable的类

http://www.lryc.cn/news/377377.html

相关文章:

  • 小知识点快速总结:Batch Normalization Layer(BN层)的作用
  • 【SpringCloud】负载均衡(Spring Cloud LoadBalancer)
  • 三生随记——输入法之谜
  • 【名词解释】Unity中的3D物理系统:刚体
  • icon转svg处理
  • 已成功见刊检索的国际学术会议论文海报展示(2)
  • EasyCVR/EasyDSS无人机直播技术助力野生动物监测
  • AI视频教程下载-ChatGPT 生产力 + 时间管理
  • Java 集合框架:LinkedList 的介绍、使用、原理与源码解析
  • 【Ruby爬虫01】某吃瓜网站图片数据采集
  • 可以免费领取tokens的大模型服务
  • NSSCTF-Web题目11
  • 【数据结构】第十八弹---C语言实现堆排序
  • [面试题]Kafka
  • centos7 离线安装zip和unzip
  • Linux下lsof命令使用
  • 基于ChatGPT的大型语言模型试用心得
  • Python 列表添加多个值(四种方法)
  • VMware RedHat虚拟机磁盘扩容(添加磁盘和扩展磁盘)
  • 最近,GPT-4o横空出世。对GPT-4o这一人工智能技术进行评价,包括版本间的对比分析、GPT-4o的技术能力以及个人整体感受等
  • C#面:C#支持多重继承么?
  • 细说MCU修改回调函数调用模式的方法
  • Java共享台球室无人系统支持微信小程序+微信公众号
  • 如何开发一个海外仓系统?难度在哪,怎么选择高性价解决方案
  • 计算机组成原理(Wrong Question)
  • ACL2024 | AI的时空穿越记:大型语言模型共时推理的奇幻之旅!
  • 从xxl-job源码中学习Netty的使用
  • 人工智能发展历程了解和Tensorflow基础开发环境构建
  • makefile追加warning日志
  • 不要直接使用unidefined 而使用void 0