求帮忙设计代码 关于异步线程的开启和暂停

2021-11-08 09:57:39 +08:00
 coderstory

需求是存在一个任务,是一个单独的线程,任务执行过程中存在多次暂停(比如调用 wait )

有一个 run 接口启动这个任务,并存在一个 next 接口唤醒这个任务

2 个接口在启动或者唤醒任务后,等待任务再次暂停,并返回任务中的一些数据。

需求场景是实现一个代码的测试功能,一串代码存在一系列的断点,前端页面点击下一步才能往下走,并且页面上可以显示对应的变量信息。类似在线 java 代码调试一样的东西。

2129 次点击
所在节点    Java
16 条回复
zzfer
2021-11-08 10:17:01 +08:00
看起来这应该需要写多个后端接口控制
cairnechen
2021-11-08 10:17:27 +08:00
已经伸手到这种程度了吗?
chendy
2021-11-08 10:18:12 +08:00
不清楚具体的业务场景是啥
感觉最好还是直接拆成一个 List<Task> 这样的结构,点一下跑一步
线程不容易控制,还要处理线程销毁超时之类的事情
smark
2021-11-08 10:25:30 +08:00
这不是在描述一个 debug 功能吗
thetbw
2021-11-08 10:27:45 +08:00
debug 这种应该一暂停就整个 jvm 暂停了,除非另起个进程,如果是本地线程,查询变量应该不好弄吧,不知道 jni 行不行。
除非需求再明确一点
liian2019
2021-11-08 11:03:09 +08:00
是不是可以把这个任务拆分成多个子任务?类似工作流或者是责任链?
coderstory
2021-11-08 11:16:17 +08:00
@smark 对的 因为每次请求都是不同的线程 所以不知道怎么控制了
coderstory
2021-11-08 11:16:54 +08:00
直接反射读取 变量都存一个 map 里面了
coderstory
2021-11-08 11:17:52 +08:00
@liian2019 这个任务是一堆方法串起来的 具体有多少个 是前端设计页面设计出来的内容决定的 整个代码都是动态生成出来的
coderstory
2021-11-08 11:18:29 +08:00
@cairnechen 对于你这样的顶级大神 任何问题都是伸手
coderstory
2021-11-08 11:20:42 +08:00
@chendy 具体的业务是 前端设计一个流程 一个流程里有多个节点
流程会转化成一个类 每个节点都是单独的方法

需求是增加一个调试功能,每个节点走完都暂停 前端显示当前的数据 页面点击下一步 就走到下一个节点
ys2016814
2021-11-08 11:31:06 +08:00
@coderstory 我当时设计过类似的需求,我们的解决方案是,前端在配置流程的时候会有暂停节点,暂停节点的 id 可以设置为-1 或者 0 , 任务的执行器在执行的时候碰到暂停节点会终止任务调用,任务的执行明细即执行记录会存储在对应的库表中,点击下一步或者说继续执行,会调用该任务的执行明细,查看执行到哪一步,继续执行下一个 task 。
banmuyutian
2021-11-08 11:33:01 +08:00
工作流+状态码+工厂模式应该可以解决
cairnechen
2021-11-08 11:51:18 +08:00
@coderstory

哟,这就开始阴阳怪气了,有点沉不住气啊朋友。只描述问题,自己的想法和思路一点都没有,这大概不是伸手党最常见的做法,哦,可能没腆着脸直接要现成的代码就不叫伸手吧
wolfie
2021-11-08 18:42:22 +08:00
@coderstory #11
上面说的 直接上工作流也可以。

也可以用反射调用,毕竟是一堆方法。
不建议线程暂停唤醒,上下文的话想办法持久话就行了。
duan602728596
2021-11-09 09:31:19 +08:00
为什么不使用 generator function 呢

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

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

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

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

© 2021 V2EX