由买买提看人间百态

boards

本页内容为未名空间相应帖子的节选和存档,一周内的贴子最多显示50字,超过一周显示500字 访问原贴
JobHunting版 - 请教一个Java 线程池 和 main主线程如何和 协调?
相关主题
Java 多线程 的架构如何改进? (转载)skype phone screen 经
请问pthread_join()和pthread_yield()的区别。Java concurrency 面试题
c++posix多线程问题请教 (转载)抖擞精神把scala的作业做完了
Re: 大家看看阿三在onsite的时候怎么黑我的 (转载)这周唯一的一点收获就是monad搞了个半懂
某start-up on-site 小感python/ruby software engineer openning
问个facebook的题目没啥乐趣了
H1B-F1-H1BCloudera Solution Architect onsite被涮--- 顺求大神推荐职位
Some bank/IT interview questions跟着二爷学Node和scala了
相关话题的讨论汇总
话题: 线程话题: future话题: 主线话题: java
进入JobHunting版参与讨论
1 (共1页)
s********e
发帖数: 340
1
碰到一个面试题:
如果使用Java线程池,比如ExecuteService线程池,有10个线程,这100个线程一起完
成一个任务。
主线程需要等待这个线程池中的100个线程完成后,再执行比如打印结果的任务。
如何让main主线程等待线程池的线程都完成任务后,再执行?
这个需求该如何实现?
我开始说,把主线程的优先级设的比较小,这样优先级就比较低了,但是这个答案不是
面试官期望的。
j******o
发帖数: 4219
2
java的话用thread join吧
s********e
发帖数: 340
3
我也说了join了, 但是面试官说,这个也不现实,因为线程池的线程很多比如100个,
1000个。
有没有什么可以做flag判断的? 我说了一个也许可以使用callable接口,返回线程任
务的执行结果,根据这个判断来决定主线程是否应该执行。但是我自己后来回来的路上
想想,感觉好像也不对。

【在 j******o 的大作中提到】
: java的话用thread join吧
g*****g
发帖数: 34805
4
最简单就是返回一列Future,call get block在上面,其他常见的办法有 countdown
latch. join 是错误的,完成的是 task. 线程池还要继续跑。

【在 s********e 的大作中提到】
: 我也说了join了, 但是面试官说,这个也不现实,因为线程池的线程很多比如100个,
: 1000个。
: 有没有什么可以做flag判断的? 我说了一个也许可以使用callable接口,返回线程任
: 务的执行结果,根据这个判断来决定主线程是否应该执行。但是我自己后来回来的路上
: 想想,感觉好像也不对。

j******o
发帖数: 4219
5
要不你用lock吧
e***a
发帖数: 1661
6
countdownlatch
l**n
发帖数: 43
7
Lock是用来避免race condition的,用在这肯定不合适
用Future应该可行

【在 j******o 的大作中提到】
: 要不你用lock吧
W*******g
发帖数: 94
8
BINGO

【在 e***a 的大作中提到】
: countdownlatch
w**z
发帖数: 8232
9
+1, 我都是一个for loop 在future get

【在 g*****g 的大作中提到】
: 最简单就是返回一列Future,call get block在上面,其他常见的办法有 countdown
: latch. join 是错误的,完成的是 task. 线程池还要继续跑。

g*****g
发帖数: 34805
10
还有一些高大上的解法如RxJava或者相似的Reactive programming framework,弄个
subscriber在那计数也行。

【在 w**z 的大作中提到】
: +1, 我都是一个for loop 在future get
相关主题
问个facebook的题目skype phone screen 经
H1B-F1-H1BJava concurrency 面试题
Some bank/IT interview questions抖擞精神把scala的作业做完了
进入JobHunting版参与讨论
x*****p
发帖数: 1707
11
shutdown() + isTerminated()
m*****k
发帖数: 731
12
coundownlatch la
m*****k
发帖数: 731
13
no need if u do not need the result of the worker thead

【在 w**z 的大作中提到】
: +1, 我都是一个for loop 在future get
w**z
发帖数: 8232
14
你不block 在future get,怎么知道那些thread 完成了?

【在 m*****k 的大作中提到】
: no need if u do not need the result of the worker thead
m*****k
发帖数: 731
15
I mean just use countdownlatch,
no need to create future then future.get while not return and use its result.
又看了一下原帖,既然都用了ExecutorService,
那就awaitTermination 啦, I guess that is why interviewer mentioned 100 is
too much.

【在 w**z 的大作中提到】
: 你不block 在future get,怎么知道那些thread 完成了?
m*****k
发帖数: 731
16
what if isTerminated() is still false? sleep and loop?
不太elegant吧.

【在 x*****p 的大作中提到】
: shutdown() + isTerminated()
p*****2
发帖数: 21240
17
用future就行了
100个future组成一个future
然后等待这个future就可以了
记住future就是monad 可以自由组合的

【在 s********e 的大作中提到】
: 碰到一个面试题:
: 如果使用Java线程池,比如ExecuteService线程池,有10个线程,这100个线程一起完
: 成一个任务。
: 主线程需要等待这个线程池中的100个线程完成后,再执行比如打印结果的任务。
: 如何让main主线程等待线程池的线程都完成任务后,再执行?
: 这个需求该如何实现?
: 我开始说,把主线程的优先级设的比较小,这样优先级就比较低了,但是这个答案不是
: 面试官期望的。

s********e
发帖数: 340
18
您好,请问 monad是什么意思?请指教,谢谢!

【在 p*****2 的大作中提到】
: 用future就行了
: 100个future组成一个future
: 然后等待这个future就可以了
: 记住future就是monad 可以自由组合的

p*****2
发帖数: 21240
19
https://github.com/peking2/coffee-monad/blob/master/README.md

【在 s********e 的大作中提到】
: 您好,请问 monad是什么意思?请指教,谢谢!
1 (共1页)
进入JobHunting版参与讨论
相关主题
跟着二爷学Node和scala了某start-up on-site 小感
学好scala确实不一样问个facebook的题目
刷题刷累的可以刷刷monadH1B-F1-H1B
这题怎么做?Some bank/IT interview questions
Java 多线程 的架构如何改进? (转载)skype phone screen 经
请问pthread_join()和pthread_yield()的区别。Java concurrency 面试题
c++posix多线程问题请教 (转载)抖擞精神把scala的作业做完了
Re: 大家看看阿三在onsite的时候怎么黑我的 (转载)这周唯一的一点收获就是monad搞了个半懂
相关话题的讨论汇总
话题: 线程话题: future话题: 主线话题: java