大家来探讨一下 Java 方法执行问题!

2020-05-07 16:31:32 +08:00
 xhf1024

就是比如一个 a 方法,会执行很多遍,第一次执行的时候执行完的时候,期间有 100 个执行了 a 方法,现在又什么方法就是第一次执行完 a 方法,期间 100 次就等着,等第一次 a 方法执行完然后再执行一次?就好比送快递的,我手里拿一个快递,那我执行送快递这个操作,我送的期间快递站有络绎不绝的快递送到服务站等着我送,等我送完之后回来,我再拿起所有的快递去实行送快递这个操作,而不是有一个快递就得派一个人送。

3728 次点击
所在节点    Java
32 条回复
zzkde
2020-05-07 19:03:34 +08:00
CountDownLatch 或者 CyclicBarrier ?
Aruforce
2020-05-07 19:05:40 +08:00
看你的意思是在第一次任务执行后,由一个线程 batch 执行在第一次任务执行间提交的批量任务?

如果是这样的话,无法做到,因为一个线程在任意时刻执行一个方法…

如果理解错误的话,当我没说……
gaius
2020-05-07 21:09:54 +08:00
单线程消费阻塞队列
719465553
2020-05-07 21:30:17 +08:00
怀疑没用过锁
Devin
2020-05-07 21:32:13 +08:00
给 a 方法加个锁,谁拿到谁执行,其他的等待。如果需要顺序,就只能队列
yeqizhang
2020-05-07 23:03:50 +08:00
感觉 22 楼翻译的对。
但我不知道是不是无法做到。
下一位
tairan2006
2020-05-08 00:25:12 +08:00
这就是普通的多生产单一消费吧?生产者把东西塞队列里,消费者一次性把队列清空…
kmyzzy
2020-05-08 01:26:09 +08:00
实在看不懂你在说什么,建议先从三年级语文学起。
oneisall8955
2020-05-08 07:33:42 +08:00
楼主的问题是这样?最开始,快递员等了一段时间,只有一个快递(需要执行方法 A 的次数),于是,送了这个快递(执行方法 A ),在送这个快递这个期间,快递站收到了很多快递(收到很多方法 A ???),快递员送完第一个快递,回头一看,有那么多快递,这次就一次性送完(执行多次方法 A )。

生产者消费者模型?
luozic
2020-05-08 09:08:28 +08:00
生产者消费者模型,但是任务加了限定策略:任务是分包的,要么是现在包里持有的单个任务,要么是任务包(用队列打包成批处理)一次执行。
异步+队列,这个不就是典型的执行 hold,再继续?
实际用锁也行。
Aresxue
2020-05-08 10:06:40 +08:00
最简单的就是锁喽, 比较适合单机情况。单机下还可以使用 LinkedBlockingQueue 、线程池(其实也是 LinkedBlockingQueue)等 juc 下的并发容器处理
分布式下可以考虑用消息队列, 前提是本身系统已经引入了一种消息队列, 不然额外引入一种消息队列的成本还有待商榷
想要轻量级就用个分布式锁,实现方式最好也与当前中间件结合,有 zk 用 zk,有 redis 用 redis, 啥都没有就用数据库或者文件去做
kongch
2020-05-08 10:28:08 +08:00
第一个进去的初始化一个全局的 volatile 的 countdownlatch 到 100,然后 await,接下来进去的每次调用 countdown 一下

这是一个专为移动设备优化的页面(即为了让你能够在 Google 搜索结果里秒开这个页面),如果你希望参与 V2EX 社区的讨论,你可以继续到 V2EX 上打开本讨论主题的完整版本。

https://www.v2ex.com/t/669335

V2EX 是创意工作者们的社区,是一个分享自己正在做的有趣事物、交流想法,可以遇见新朋友甚至新机会的地方。

V2EX is a community of developers, designers and creative people.

© 2021 V2EX