【发布时间】:2021-10-15 05:26:49
【问题描述】:
背景
我打算制作一个每分钟运行一次的调度程序。每次运行时,都会给出不同的目标数据,每次可能需要大约 90 秒的时间。
我的计划
过程是这样的:
multiple producers(threads) :
1. get data from some API
2. using data from 1. parse given data
3. put it into a common queue
↓
common queue
↓
multiple consumers(threads) :
1. get data from the queue
2. call some API
3. then insert into RDB
(每个数据的顺序无关紧要)
如果我理解正确,当用户线程正在运行时,主线程可能会提前完成,并且进程将继续运行直到这些用户线程完成。
问题/疑问
我希望每个进程都有自己的公共队列,仅用于来自同一进程的线程。也希望在每个进程完成后释放某个队列的内存。
我的意思是,有可能像下面这样吗? :
- 正在运行进程 A,只有 A 中的线程可以访问队列 X。
- 运行进程 B,只有 B 中的线程可以访问队列 Y。
- 关闭进程A,释放队列X的内存。
- 正在运行进程 C,只有来自 C 的线程才能访问队列 Z。
- 关闭进程B,释放队列Y的内存。
- 关闭进程C,释放队列Z的内存。
这是我第一次处理多线程。 先感谢您! :)
【问题讨论】:
-
@Salil 谢谢!当进程 A、B 运行时,这意味着有 2 个阻塞队列。进程 A 的线程是否可以访问进程 B 的阻塞队列?进程 A 完成后来自进程 A 的阻塞队列是否空闲?
-
这里的“过程”是什么意思?您是指实际的 Java 虚拟机进程吗?还是你的一些内部抽象?
-
我的意思是,我的流程:生产者 - 队列 - 消费者
-
例如 [2021-19-15 17:07:00] 进程 A 运行 [2021-19-15 17:08:00] 进程 B 运行 [2021-19-15 17:08] :30] 流程 A 完成 [2021-19-15 17:09:30] 流程 B 完成
标签: java multithreading