Java异步调用的方法是什么
发表于:2026-11-02 作者:千家信息网编辑
千家信息网最后更新 2026年11月02日,这篇文章主要讲解了"Java异步调用的方法是什么",文中的讲解内容简单清晰,易于学习与理解,下面请大家跟着小编的思路慢慢深入,一起来研究和学习"Java异步调用的方法是什么"吧!一、创建线程@Test
千家信息网最后更新 2026年11月02日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安全错误
数据库的锁怎样保障安全
科技互联网公司装修
互联网中国科技
互联网金融 科技
北京互联网络科技有限公司
苏州互联网科技贷款公司
友谊互联网络科技
镁科技互联网资讯平台
温州喔噻互联网科技有限公司
互联网科技中介
重庆威客帮互联网科技
和信科技工业互联网
天津腾达互联网科技有限公司
玉溪新华互联网科技好不好
小米互联网科技园入驻
互联网时代科技型公司的机会
北京军民互联网科技公司
互联网对科技影响
河南商务圈互联网科技有限公司
互联网科技创业计划的风险分析
上海旺乐尼互联网科技有限公司
互联网科技公司经营范围
互联网最新的科技
壹账通互联网科技
互联网公司科技股
赶超互联网科技 微信多开
互联网5g黑科技有哪些
广州市恰铎互联网科技有限公司
互联网科技股为什么大涨
广州全民伙伴互联网科技有限公司
小牛互联网科技有限公司地址