avatar
问个多线程的问题# Java - 爪哇娇娃
g*g
1
我有一个程序,主线程需要等几个线程结束后做一些动作。
通常用join就可以解决。现在的问题是这个其实是一个三级的层次。
主线程产生一些子线程,这些子线程又分别产生一些孙线程,等孙
线程结束后子线程需要做一些处理。所有的孙线程都扔进一个ThreadPoolExcutor
执行。我的理解孙线程何时开始是由ThreadPool决定的。这样在子
线程里用join等待似乎不成吧?
avatar
c*t
2
你可以让子线程 wait 在一个 lock 上。thread pool 有 add thread / remove
thread (called by the 孙线程,在结束的时候)。当 thread pool 的 size
是 0 的时候,notifyAll 这个 lock 。

【在 g*****g 的大作中提到】
: 我有一个程序,主线程需要等几个线程结束后做一些动作。
: 通常用join就可以解决。现在的问题是这个其实是一个三级的层次。
: 主线程产生一些子线程,这些子线程又分别产生一些孙线程,等孙
: 线程结束后子线程需要做一些处理。所有的孙线程都扔进一个ThreadPoolExcutor
: 执行。我的理解孙线程何时开始是由ThreadPool决定的。这样在子
: 线程里用join等待似乎不成吧?

avatar
g*g
3
找到这个类,CountDownLatch,会维护一个counter,似乎比较方便。
只要孙线程结束前countdown,到0就会产生一个Interruption唤醒子线程。

【在 c*****t 的大作中提到】
: 你可以让子线程 wait 在一个 lock 上。thread pool 有 add thread / remove
: thread (called by the 孙线程,在结束的时候)。当 thread pool 的 size
: 是 0 的时候,notifyAll 这个 lock 。

avatar
c*t
4
这不用找。自己写更简单。。。

【在 g*****g 的大作中提到】
: 找到这个类,CountDownLatch,会维护一个counter,似乎比较方便。
: 只要孙线程结束前countdown,到0就会产生一个Interruption唤醒子线程。

avatar
F*n
5
为什么不能用JOIN,一个一个等

【在 g*****g 的大作中提到】
: 我有一个程序,主线程需要等几个线程结束后做一些动作。
: 通常用join就可以解决。现在的问题是这个其实是一个三级的层次。
: 主线程产生一些子线程,这些子线程又分别产生一些孙线程,等孙
: 线程结束后子线程需要做一些处理。所有的孙线程都扔进一个ThreadPoolExcutor
: 执行。我的理解孙线程何时开始是由ThreadPool决定的。这样在子
: 线程里用join等待似乎不成吧?

avatar
g*g
6
线程要start之后才能join吧,我的理解是如此。

【在 F****n 的大作中提到】
: 为什么不能用JOIN,一个一个等
avatar
m*t
7

That is what I would do, too. Only caveat is you gotta remember to put
the countdown call in a finally block.

【在 g*****g 的大作中提到】
: 找到这个类,CountDownLatch,会维护一个counter,似乎比较方便。
: 只要孙线程结束前countdown,到0就会产生一个Interruption唤醒子线程。

avatar
g*g
8
Good point, I wasn't expecting an exception as all checked exceptions
are caught. But I realize if some RuntimeException is throwed, I'll be
screwed.

【在 m******t 的大作中提到】
:
: That is what I would do, too. Only caveat is you gotta remember to put
: the countdown call in a finally block.

avatar
T*g
9
countdownlatch吧,

【在 g*****g 的大作中提到】
: 我有一个程序,主线程需要等几个线程结束后做一些动作。
: 通常用join就可以解决。现在的问题是这个其实是一个三级的层次。
: 主线程产生一些子线程,这些子线程又分别产生一些孙线程,等孙
: 线程结束后子线程需要做一些处理。所有的孙线程都扔进一个ThreadPoolExcutor
: 执行。我的理解孙线程何时开始是由ThreadPool决定的。这样在子
: 线程里用join等待似乎不成吧?

相关阅读
logo
联系我们隐私协议©2024 redian.news
Redian新闻
Redian.news刊载任何文章,不代表同意其说法或描述,仅为提供更多信息,也不构成任何建议。文章信息的合法性及真实性由其作者负责,与Redian.news及其运营公司无关。欢迎投稿,如发现稿件侵权,或作者不愿在本网发表文章,请版权拥有者通知本网处理。