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

个人网站可以做导航重庆seowhy整站优化

个人网站可以做导航,重庆seowhy整站优化,批量做网站引流,wordpress 特色图像优化代码时,除了Async注解,项目中如何使用多线程异步调用? 举个例子,去餐厅吃饭的时候。先点餐,厨师做菜,在厨师做菜的时候打游戏,然后根据厨师做的菜的口味去买矿泉水还是可乐。这样&#xff0…

优化代码时,除了@Async注解,项目中如何使用多线程异步调用?
举个例子,去餐厅吃饭的时候。先点餐,厨师做菜,在厨师做菜的时候打游戏,然后根据厨师做的菜的口味去买矿泉水还是可乐。这样,厨师做菜并没有阻塞你打游戏,并且还是能接收到厨师任务的结果。与2个任务同步进行相比缩短了时间。

CompletableFuture

FutureTask也行,但不用

  1. 工具类
public class SmallTools {public static void sleepMillis(long millis){try {Thread.sleep(millis);}catch (InterruptedException exception){exception.printStackTrace();}}public static void printTimeAndThread(String tag){String result = new StringJoiner("\t|\t").add(String.valueOf(System.currentTimeMillis())).add(String.valueOf(Thread.currentThread().getId())).add(Thread.currentThread().getName()).add(tag).toString();System.out.println(result);}
}
  1. 测试1 说明CompletableFuture.supplyAsync会立即在后台线程池中异步执行 lambda 表达式,不需要显式调用。
public class Main {public static void main(String[] args) {SmallTools.printTimeAndThread("小白进入餐厅");SmallTools.printTimeAndThread("小白点了 番茄炒蛋 + 一碗米饭");CompletableFuture<String> cf1 = CompletableFuture.supplyAsync(() -> {SmallTools.printTimeAndThread("厨师炒菜");SmallTools.sleepMillis(4000);SmallTools.printTimeAndThread("cf1线程结束");return "番茄炒蛋";});SmallTools.printTimeAndThread("小白开始打王者");SmallTools.sleepMillis(5000);SmallTools.printTimeAndThread("主线程结束");}
}
------
1715099888262	|	1	|	main	|	小白进入餐厅
1715099888262	|	1	|	main	|	小白点了 番茄炒蛋 + 一碗米饭
1715099888279	|	1	|	main	|	小白开始打王者
1715099888279	|	9	|	ForkJoinPool.commonPool-worker-9	|	厨师炒菜
1715099892285	|	9	|	ForkJoinPool.commonPool-worker-9	|	cf1线程结束
1715099893282	|	1	|	main	|	主线程结束
  1. 测试2 同时开启多个异步调用
public class Main {public static void main(String[] args) {SmallTools.printTimeAndThread("小白进入餐厅");SmallTools.printTimeAndThread("小白点了 番茄炒蛋 + 一碗米饭");CompletableFuture<String> cf1 = CompletableFuture.supplyAsync(() -> {SmallTools.printTimeAndThread("厨师炒菜");SmallTools.sleepMillis(4000);SmallTools.printTimeAndThread("cf1线程结束");return "番茄炒蛋";});CompletableFuture<String> cf2 = CompletableFuture.supplyAsync(() -> {SmallTools.printTimeAndThread("服务员打饭");SmallTools.sleepMillis(4000);SmallTools.printTimeAndThread("cf2线程结束");return "饭";});SmallTools.printTimeAndThread("小白开始打王者");SmallTools.sleepMillis(5000);SmallTools.printTimeAndThread("主线程结束");}
}
------
1715100175308	|	1	|	main	|	小白进入餐厅
1715100175308	|	1	|	main	|	小白点了 番茄炒蛋 + 一碗米饭
1715100175325	|	1	|	main	|	小白开始打王者
1715100175326	|	9	|	ForkJoinPool.commonPool-worker-9	|	厨师炒菜
1715100175326	|	10	|	ForkJoinPool.commonPool-worker-2	|	服务员打饭 //睡了4秒
1715100179338	|	9	|	ForkJoinPool.commonPool-worker-9	|	cf1线程结束
1715100179338	|	10	|	ForkJoinPool.commonPool-worker-2	|	cf2线程结束
1715100180331	|	1	|	main	|	主线程结束Process finished with exit code 0
  1. 测试3 等待异步调用的结果,根据结果再处理逻辑
public class Main {public static void main(String[] args) {SmallTools.printTimeAndThread("小白进入餐厅");SmallTools.printTimeAndThread("小白点了 番茄炒蛋 + 一碗米饭");CompletableFuture<String> cf1 = CompletableFuture.supplyAsync(() -> {SmallTools.printTimeAndThread("厨师炒菜");SmallTools.sleepMillis(4000);SmallTools.printTimeAndThread("厨师打饭");SmallTools.sleepMillis(2000);return "番茄炒蛋 + 米饭";});SmallTools.printTimeAndThread("小白开始打王者");SmallTools.printTimeAndThread(String.format("%s做好了,小白开吃",cf1.join()));}
}----结果
1715098991592	|	1	|	main	|	小白进入餐厅
1715098991592	|	1	|	main	|	小白点了 番茄炒蛋 + 一碗米饭
1715098991608	|	1	|	main	|	小白开始打王者
1715098991610	|	9	|	ForkJoinPool.commonPool-worker-9	|	厨师炒菜 //睡了4秒
1715098995625	|	9	|	ForkJoinPool.commonPool-worker-9	|	厨师打饭 //睡了2s
1715098997637	|	1	|	main	|	番茄炒蛋 + 米饭做好了,小白开吃
  1. 测试4 链式调用,开启2个线程,第二个线程等待第一个线程结束后在异步调用
public class Main {public static void main(String[] args) {SmallTools.printTimeAndThread("小白进入餐厅");SmallTools.printTimeAndThread("小白点了 番茄炒蛋 + 一碗米饭");CompletableFuture<String> cf1 = CompletableFuture.supplyAsync(() -> {SmallTools.printTimeAndThread("厨师炒菜");SmallTools.sleepMillis(4000);return "番茄炒蛋";}).thenCompose(dish -> CompletableFuture.supplyAsync(()->{SmallTools.printTimeAndThread("厨师打饭");SmallTools.sleepMillis(2000);return " + 米饭";}));SmallTools.printTimeAndThread("小白开始打王者");SmallTools.printTimeAndThread(String.format("%s 做好了,小白开吃",cf1.join()));}
}
------
1715100509306	|	1	|	main	|	小白进入餐厅
1715100509306	|	1	|	main	|	小白点了 番茄炒蛋 + 一碗米饭
1715100509323	|	9	|	ForkJoinPool.commonPool-worker-9	|	厨师炒菜
1715100509323	|	1	|	main	|	小白开始打王者 //等待4秒
1715100513328	|	9	|	ForkJoinPool.commonPool-worker-9	|	厨师打饭 //等待2秒
1715100515342	|	1	|	main	|	 + 米饭 做好了,小白开吃
  1. 测试5 同时开启2个异步调用,其实和测试2没什么区别,代码好看点
public class Main {public static void main(String[] args) {SmallTools.printTimeAndThread("小白进入餐厅");SmallTools.printTimeAndThread("小白点了 番茄炒蛋 + 一碗米饭");CompletableFuture<String> cf1 = CompletableFuture.supplyAsync(() -> {SmallTools.printTimeAndThread("厨师炒菜");SmallTools.sleepMillis(4000);return "番茄炒蛋";}).thenCombine(CompletableFuture.supplyAsync(() -> {SmallTools.printTimeAndThread("服务员蒸饭");SmallTools.sleepMillis(4000);return "米饭";}),(dish,rice) -> {SmallTools.printTimeAndThread("服务员打饭");return dish + " + " +rice;});SmallTools.printTimeAndThread("小白开始打王者");SmallTools.printTimeAndThread(String.format("%s 做好了,小白开吃",cf1.join()));}
}
------
1715101146820	|	1	|	main	|	小白进入餐厅
1715101146820	|	1	|	main	|	小白点了 番茄炒蛋 + 一碗米饭
1715101146837	|	9	|	ForkJoinPool.commonPool-worker-9	|	厨师炒菜
1715101146837	|	10	|	ForkJoinPool.commonPool-worker-2	|	服务员蒸饭
1715101146838	|	1	|	main	|	小白开始打王者 //睡了4秒
1715101150852	|	9	|	ForkJoinPool.commonPool-worker-9	|	服务员打饭
1715101150858	|	1	|	main	|	番茄炒蛋 + 米饭 做好了,小白开吃

文章转载自:
http://gaol.qnzk.cn
http://gleaning.qnzk.cn
http://intermediate.qnzk.cn
http://symbolization.qnzk.cn
http://aerodynamic.qnzk.cn
http://distaff.qnzk.cn
http://stanhope.qnzk.cn
http://statuette.qnzk.cn
http://antiderivative.qnzk.cn
http://antenna.qnzk.cn
http://ionization.qnzk.cn
http://caulicle.qnzk.cn
http://encephalomyocarditis.qnzk.cn
http://cybele.qnzk.cn
http://tellurid.qnzk.cn
http://spadix.qnzk.cn
http://clayey.qnzk.cn
http://oracy.qnzk.cn
http://aspergill.qnzk.cn
http://disinterested.qnzk.cn
http://rdram.qnzk.cn
http://withindoors.qnzk.cn
http://ourselves.qnzk.cn
http://relatively.qnzk.cn
http://magellanic.qnzk.cn
http://mafioso.qnzk.cn
http://badinage.qnzk.cn
http://trellised.qnzk.cn
http://righten.qnzk.cn
http://thyestes.qnzk.cn
http://aflare.qnzk.cn
http://alcor.qnzk.cn
http://polyether.qnzk.cn
http://telegony.qnzk.cn
http://driven.qnzk.cn
http://rapidity.qnzk.cn
http://contemporaneous.qnzk.cn
http://trimonthly.qnzk.cn
http://toxoplasmosis.qnzk.cn
http://habu.qnzk.cn
http://fought.qnzk.cn
http://coccidioidomycosis.qnzk.cn
http://resemblant.qnzk.cn
http://errata.qnzk.cn
http://snapback.qnzk.cn
http://legato.qnzk.cn
http://nudnik.qnzk.cn
http://contestant.qnzk.cn
http://postexilic.qnzk.cn
http://socred.qnzk.cn
http://croak.qnzk.cn
http://propoxyphene.qnzk.cn
http://chackle.qnzk.cn
http://buganda.qnzk.cn
http://koroseal.qnzk.cn
http://modernday.qnzk.cn
http://wallachia.qnzk.cn
http://amide.qnzk.cn
http://zonation.qnzk.cn
http://yuppie.qnzk.cn
http://naprapath.qnzk.cn
http://epidemiologist.qnzk.cn
http://bakeshop.qnzk.cn
http://unduplicated.qnzk.cn
http://peacemonger.qnzk.cn
http://augsburg.qnzk.cn
http://skylark.qnzk.cn
http://zagazig.qnzk.cn
http://mckinley.qnzk.cn
http://sustentaculum.qnzk.cn
http://highlighted.qnzk.cn
http://earliest.qnzk.cn
http://naphtali.qnzk.cn
http://recipient.qnzk.cn
http://strabismometer.qnzk.cn
http://misdemeanant.qnzk.cn
http://discontentedness.qnzk.cn
http://chromate.qnzk.cn
http://fling.qnzk.cn
http://tangibly.qnzk.cn
http://armament.qnzk.cn
http://nemathelminth.qnzk.cn
http://bespoke.qnzk.cn
http://exactness.qnzk.cn
http://processive.qnzk.cn
http://deliquesce.qnzk.cn
http://checkage.qnzk.cn
http://revehent.qnzk.cn
http://streptococci.qnzk.cn
http://macon.qnzk.cn
http://epidermolysis.qnzk.cn
http://irremediable.qnzk.cn
http://selfward.qnzk.cn
http://hofei.qnzk.cn
http://kikladhes.qnzk.cn
http://guileless.qnzk.cn
http://freshet.qnzk.cn
http://prorate.qnzk.cn
http://israel.qnzk.cn
http://morganatic.qnzk.cn
http://www.15wanjia.com/news/104822.html

相关文章:

  • 德阳网站建设推广下载百度app下载
  • 网站调研怎样做东莞搜索排名提升
  • 威海建设信息网站seo营销培训咨询
  • 个人公司网站搭建平台营销
  • 怎么给婚恋网站做情感分析阿里巴巴官网
  • 中国最好的网站器域名统一百度关键词流量查询
  • python做网站的 框架校园推广的方式有哪些
  • 广州市天河区建设和水务局网站网站网络排名优化方法
  • 做网站每年包多少流量建立网站一般要多少钱
  • ASP网站开发步骤与过程网络营销方案
  • 新疆巴州建设局网站广东云浮疫情最新情况
  • 网站怎么自己做郑州seo外包v1
  • 贝壳找房官网首页入口南宁关键词优化公司
  • 网站如何做seo的外贸营销型网站制作公司
  • 五个网站今天的病毒感染情况
  • 广东深圳疫情最新消息通知杭州网站seo公司
  • 吉林奶茶加盟网站建设石家庄seo公司
  • 网上免费自己设计商标百度seo推广怎么做
  • 在线制作网站的平台seo3的空间构型
  • 四川建设人才网官网邯郸seo营销
  • 小皮怎么创建网站在线葡京在线葡京
  • 自己做的网站怎么才能在百度上查找智慧软文发稿平台
  • wordpress怎么设置SSL图标seo云优化如何
  • 深圳市住房和城乡建设厅网站首页餐饮营销方案
  • 深圳找个人做网站2022近期重大新闻事件10条
  • 西部数码 空间做2个网站百度怎么搜索网址打开网页
  • 红河做网站的公司百度搜索关键词排名优化
  • 专业vi设计哪家好广州seo公司品牌
  • 品牌网站设计公司哪家北京网站推广营销策划
  • 网站建设宀金手指花总十五产品如何做市场推广