我在一次面试中被问到这个问题--不确定这是否有意义。
您有几个具有相同优先级的线程已启动并运行,如何确保其中的某个特定线程先运行才能完成?
不能在其他线程上使用等待()和睡眠()技巧。
编辑:不允许修改其他线程。
发布于 2011-11-12 16:17:39
它是不推荐的,并且本质上是不安全的(因此您永远不应该使用它),但是您可以suspend()所有其他线程,然后对您想要先完成的线程进行join(),然后对resume()进行处理。
我不确定这是不是他们想要的。如果是的话,我会怀疑他们的面试技巧或Java知识。
我能想到的“好”解决方案至少需要对线程将要运行的代码进行轻微的修改。您确定修改这些线程是禁止的吗?
发布于 2011-11-12 16:18:26
让一个线程join()另一个线程
发布于 2011-11-12 16:38:58
由于不允许修改线程,所以必须挂起等待的线程,并在必须先完成的线程上联接()。
为了保持完整性,我将保留以下内容(在添加有关修改线程的说明之前,我已经回答了),但是在问题的明确限制下,这些方法将被禁止:
让其他每个线程都在应该首先完成的线程上调用join()。这将导致它们等待线程终止,但使用的CPU时间要比less ()循环所用的时间要少得多。
Thread first = new FirstThread();
Thread after1 = new AfterThread(first);
Thread after2 = new AfterThread(first);在AfterThread的run方法中:
first.join();
// Do the rest of this thread's code您还可以传递一个超时来联接()。
另一种方法可能是创建只有特定命名线程才能获得的锁,直到该命名线程获得并释放一次锁。
https://stackoverflow.com/questions/8105653
复制相似问题