0

我是Java新手,我想知道如何做一些我在面试问题中被问到的事情。

你有三个线程T1T2T3
你如何确保他们按顺序完成T1,,,T2。 面试官让我在上面写程序。 我知道这个问题可以通过或者我无法成功的一些概念来回答。你们能告诉我如何去做吗?T3

joincount down latch

4

4 回答 4

4

创建3个线程但不启动它们,然后如下

t1.start();
t1.join();
t2.start();
t2.join();
t3.start();

Thread.join 等待一个线程终止,所以顺序有保证

于 2013-03-21T08:08:29.627 回答
1

对我来说,这是一个棘手的问题。我会问面试官为什么他希望他们以特定的顺序完成。坦率地说,除了等待其子线程的主线程之外,我看不到任何我希望单独的线程以特定顺序完成的情况。

于 2013-03-21T08:08:55.720 回答
0

有多种方法可以做到这一点。最简单的方法是使用Thread.join,这将导致当前线程暂停,直到您正在调用的线程join()完成:

someThread.join();
// the current thread won't continue until someThread completes

然后,您可以让 T3 在 T2 上加入,T2 在 T1 上加入。

但如果我是你,我会问面试官为什么他们希望线程按这个顺序完成。是因为 T3 消耗了 T2 生产的东西吗?如果是这样,像并发队列这样的东西可能会更好,因为它不那么脆弱——您可以更改哪个线程来完成消费或生产事物的工作而不会破坏事物。哎呀,生产者/消费者线程可以设置为永远不会完成,而是让一个尽可能快地生产,而另一个尽可能快地消耗。线程都是关于知道事情发生的顺序,除了某些接触点(例如准备被消费的东西)。

所以基本上,所提出的问题有点虚假。

于 2013-03-21T08:07:53.253 回答
0

如果线程应该按顺序完成,那么为什么不将所有三个的代码都放在一个线程的运行中呢?

于 2013-03-21T08:32:50.513 回答