使单个线程执行完成

时间:2011-11-12 16:11:32

标签: java multithreading

我在接受采访时被问到这个问题 - 不确定它是否有意义。

你有几个相同优先级的线程已经启动并运行,你如何确保其中的特定线程首先运行完成?

不能在其他线程上使用wait()和sleep()技巧..

编辑: 不允许修改其他线程。

3 个答案:

答案 0 :(得分:6)

有一个线程join()另一个

答案 1 :(得分:2)

由于不允许修改线程,因此必须先挂起必须先完成的线程上的等待线程和join()。


为了完整性,我将留下以下内容(我在补充修改线程的澄清之前回答),但在问题的明确限制下,这些方法将被禁止:

让每个其他线程在应该首先完成的线程上调用join()。这将导致它们等到该线程终止,但使用的时间比sleep()循环少得多。

Thread first = new FirstThread();
Thread after1 = new AfterThread(first);
Thread after2 = new AfterThread(first);

在AfterThread的运行方法中:

first.join();
// Do the rest of this thread's code

您也可以将超时传递给join()。

另一种方法可能是创建一个只有特定命名线程可以获取的锁,直到该命名线程获得并释放一次为止。

答案 2 :(得分:1)

它已被弃用并且本质上不安全(所以你永远不应该使用它),但你可以suspend()所有其他线程,然后join()在你想要先完成的那个线程上,然后{{1} }。

我不确定这是不是他们想要的。如果是,我会怀疑他们的面试技巧或他们的Java知识。

我能想到的“好”解决方案至少需要简单地修改线程将要运行的代码。你确定修改这些线程是不受限制的吗?