Java异步调用的方法是什么
发表于:2025-01-31 作者:千家信息网编辑
千家信息网最后更新 2025年01月31日,这篇文章主要讲解了"Java异步调用的方法是什么",文中的讲解内容简单清晰,易于学习与理解,下面请大家跟着小编的思路慢慢深入,一起来研究和学习"Java异步调用的方法是什么"吧!一、创建线程@Test
千家信息网最后更新 2025年01月31日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安全错误
数据库的锁怎样保障安全
kis 数据库保护
qq的加密方式网络安全
番禺区质量网络技术开发商家
对计算机网络安全的认识
买一个方舟服务器要多少钱
drools7 数据库
手机连接云数据库吗
php本地json数据库
专题栏软件开发平台
泉州星梦汇软件开发有限公司
公安局网络安全中标
访问数据库访问被拒怎么办
服务器与客户端交互
网络技术公司的管理架构
北京做旅游软件开发
尊服务器
mysql数据库缓存配置
江苏安卓软件开发费用是多少
四川物保宝网络技术有限公司
天津数据库安全箱市场价格
表格如何匹配原数据库
ip如何代理服务器
北京市互联网络科技有限公司
重庆软件开发集团
网络安全应急中国红客
在互联网时代 伴随网络技术
校园网络安全防范工作总结
网络安全威胁的手段
广州盈民网络技术
软件开发心得总结