Java 使单个线程执行到完成

Java 使单个线程执行到完成,java,multithreading,Java,Multithreading,我在一次采访中被问到这个问题——不确定这是否有意义 您已经启动并运行了多个优先级相同的线程,如何确保这些线程中的某个线程先运行到完成 您不能对其他线程使用wait()和sleep()技巧 编辑: 不允许修改其他线程。它已被弃用,而且本质上是不安全的(因此您不应该使用它),但是您可以挂起()所有其他线程,然后在您想首先完成的线程上加入(),然后恢复() 我不确定这是否是他们的目的。如果是的话,我会怀疑他们的面试技巧或Java知识 我能想到的“好”解决方案至少需要修改线程将要运行的代码。您确定不能修

我在一次采访中被问到这个问题——不确定这是否有意义

您已经启动并运行了多个优先级相同的线程,如何确保这些线程中的某个线程先运行到完成

您不能对其他线程使用wait()和sleep()技巧

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

它已被弃用,而且本质上是不安全的(因此您不应该使用它),但是您可以
挂起()
所有其他线程,然后
在您想首先完成的线程上加入()
,然后
恢复()

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


我能想到的“好”解决方案至少需要修改线程将要运行的代码。您确定不能修改这些线程吗?

有一个线程
join()
另一个线程由于不允许修改线程,您必须先在必须完成的线程上挂起等待的线程和join()


为了完整起见,我将保留以下内容(我在添加关于修改线程的说明之前回答),但在问题的明确约束下,这些方法将被禁止:

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

Thread first = new FirstThread();
Thread after1 = new AfterThread(first);
Thread after2 = new AfterThread(first);
在后线程的run方法中:

first.join();
// Do the rest of this thread's code
您还可以为join()传递超时


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

在线程上将priority()设置为max是否在规则范围内?@dbjohn-否。优先级不能为changed@dbjohn更改优先级并不能保证任何事情。是的。如果我答对了,那么这个问题的形成方式就是禁止修改线程。我得到了一个提示,好像我可以从JVM的角度做任何事情。@johnbk,从“JVM角度”可以更改的任何事情都需要更改或添加代码。这需要修改您试图控制的线程。它只需要更改等待线程的代码。