如何执行一段代码,所有线程都做了之后
-
18-09-2019 - |
题
我有需要所有Threads
s被执行之后所要执行的记录代码。
Thread t1 = new MyThread();
Thread t2 = new MyThread();
t1.run();
t2.run();
doLogging();
有什么办法来执行doLogging()
只有在两个线程都与他们的处理完成。现在doLogging()
是尽快T1和T2开始调用。
解决方案
只需 join()
一>您doLogging()
调用之前的所有主题:
t1.join();
t2.join();
// the following line will be executed when both threads are done
doLogging();
请注意,如果你想等待所有线程join()
调用的顺序并不重要。
其他提示
在除了加入()溶液也有一些在java.util.concurrent中库调用CountDownLatch。它可以让你将它初始化到一定的数量,然后等待,直到它被击中的指定次数。
简单示例:
CountDownLatch latch = new CountDownLatch(NUMBER_OF_THREADS);
for(int i=0; i<NUMBER_OF_THREADS;i++)
new Thread(myCode).start();
latch.await();
闩锁必须通过工作线程被明确地击中该工作,虽然:
latch.countDown()
如果您正在运行在主线程心目中的代码,熊,这会造成用户界面挂起,直到两个线程完成。这可能不是所期望的效果。
相反,你可以考虑在每个线程同步在你Logger
对象结构和构造中进行调用它。因为我不知道什么是你特别想完成这样做,其他的解决办法是什么的勒夫建议,只布置一个码一个线程内。
不隶属于 StackOverflow