Java异步调用的方法是什么
发表于:2025-11-08 作者:千家信息网编辑
千家信息网最后更新 2025年11月08日,这篇文章主要讲解了"Java异步调用的方法是什么",文中的讲解内容简单清晰,易于学习与理解,下面请大家跟着小编的思路慢慢深入,一起来研究和学习"Java异步调用的方法是什么"吧!一、创建线程@Test
千家信息网最后更新 2025年11月08日Java异步调用的方法是什么
这篇文章主要讲解了"Java异步调用的方法是什么",文中的讲解内容简单清晰,易于学习与理解,下面请大家跟着小编的思路慢慢深入,一起来研究和学习"Java异步调用的方法是什么"吧!
一、创建线程
@Testpublic void test0() throws Exception { System.out.println("main函数开始执行"); Thread thread=new Thread(new Runnable() { @Override public void run() { System.out.println("===task start==="); try { Thread.sleep(5000); } catch (InterruptedException e) { e.printStackTrace(); } System.out.println("===task finish==="); } }); thread.start(); System.out.println("main函数执行结束");}二、Future
jdk8之前的实现方式,在JUC下增加了Future,从字面意思理解就是未来的意思,但使用起来却着实有点鸡肋,并不能实现真正意义上的异步,获取结果时需要阻塞线程,或者不断轮询。
@Testpublic void test1() throws Exception { System.out.println("main函数开始执行"); ExecutorService executor = Executors.newFixedThreadPool(1); Future future = executor.submit(new Callable() { @Override public Integer call() throws Exception { System.out.println("===task start==="); Thread.sleep(5000); System.out.println("===task finish==="); return 3; } }); //这里需要返回值时会阻塞主线程,如果不需要返回值使用是OK的。倒也还能接收 //Integer result=future.get(); System.out.println("main函数执行结束"); System.in.read();}三、CompletableFuture
使用原生的CompletableFuture实现异步操作,加上对lambda的支持,可以说实现异步任务已经发挥到了极致。
@Testpublic void test2() throws Exception { System.out.println("main函数开始执行"); ExecutorService executor = Executors.newFixedThreadPool(2); CompletableFuture future = CompletableFuture.supplyAsync(new Supplier() { @Override public Integer get() { System.out.println("===task start==="); try { Thread.sleep(5000); } catch (InterruptedException e) { e.printStackTrace(); } System.out.println("===task finish==="); return 3; } }, executor); future.thenAccept(e -> System.out.println(e)); System.out.println("main函数执行结束");}四、Spring的Async注解
使用spring实现异步需要开启注解,可以使用xml方式或者Java config的方式。
xml方式:
"executor" />"executor" pool-size="2" 线程池的大小 queue-capacity="100" 排队队列长度 keep-alive="120" 线程保活时间(单位秒) rejection-policy="CALLER_RUNS" 对拒绝的任务处理策略 />
java方式:
@EnableAsyncpublic class MyConfig { @Bean public TaskExecutor executor(){ ThreadPoolTaskExecutor executor=new ThreadPoolTaskExecutor(); executor.setCorePoolSize(10); //核心线程数 executor.setMaxPoolSize(20); //最大线程数 executor.setQueueCapacity(1000); //队列大小 executor.setKeepAliveSeconds(300); //线程最大空闲时间 executor.setThreadNamePrefix("fsx-Executor-"); //指定用于新创建的线程名称的前缀。 executor.setRejectedExecutionHandler(new ThreadPoolExecutor.CallerRunsPolicy()); return executor; }}(1)@Async
@Testpublic void test3() throws Exception { System.out.println("main函数开始执行"); myService.longtime(); System.out.println("main函数执行结束");}@Asyncpublic void longtime() { System.out.println("我在执行一项耗时任务"); try { Thread.sleep(5000); } catch (InterruptedException e) { e.printStackTrace(); } System.out.println("完成");}(2)AsyncResult
如果需要返回值,耗时方法返回值用AsyncResult包装。
@Testpublic void test4() throws Exception { System.out.println("main函数开始执行"); Future future=myService.longtime2(); System.out.println("main函数执行结束"); System.out.println("异步执行结果:"+future.get());}@Asyncpublic Future longtime2() { System.out.println("我在执行一项耗时任务"); try { Thread.sleep(8000); } catch (InterruptedException e) { e.printStackTrace(); } System.out.println("完成"); return new AsyncResult(3);}感谢各位的阅读,以上就是"Java异步调用的方法是什么"的内容了,经过本文的学习后,相信大家对Java异步调用的方法是什么这一问题有了更深刻的体会,具体使用情况还需要大家实践验证。这里是,小编将为大家推送更多相关知识点的文章,欢迎关注!
函数
线程
方法
方式
任务
学习
最大
内容
大小
就是
意思
时间
注解
结果
队列
阻塞
不断
前缀
单位
名称
数据库的安全要保护哪些东西
数据库安全各自的含义是什么
生产安全数据库录入
数据库的安全性及管理
数据库安全策略包含哪些
海淀数据库安全审计系统
建立农村房屋安全信息数据库
易用的数据库客户端支持安全管理
连接数据库失败ssl安全错误
数据库的锁怎样保障安全
2b2t国际服务器推荐
数据库管理三级模式之间的映射
川大下载爱如生数据库
最先进数据库技术
深圳市百亿科网络技术
文件拷贝不到服务器是啥原因
单机服务器架设
战地5自己建立服务器
网络安全知识答题简报
男生学会计还是网络技术
软件开发产品及服务设计
U点家庭服务器能不能看标清频道
云开发的数据库代码在哪里
英雄联盟中国区哪个服务器好
王者荣耀服务器未连接是什么意思
南充网络安全宣传周邀请函
教育诚信考试数据库
数据管理服务器
光明区品质网络技术开发工艺
拓程互联网科技有限公司
微软sql数据库费用
网络安全预防诈骗手抄报
软件开发付款方式比例
数据库植物管理系统代码
苏州营销网络技术
2013年网络技术应用
php文件链接数据库
梦幻西游少林寺服务器现状
局域网内网站数据库制作
数据管理服务器