2つの変数(開始時間と終了時間)を含む「スレッド」のリストが与えられた場合、ある時間tに実行中のすべてのスレッドを返す関数を実装します。それを最適化します。(O(n)よりも速い)
私の解決策は、リスト(O(n))を反復処理することでした。ここでO(n)より速く達成する方法を知っている人はいますか?
class MyThread{
Thread thread;
long start;
long end;
}//the object in the list
//function to find "threads"
public List<Thread> matchingInterval(List<MyThread> list) {
List<Thread> found = new ArrayList<Thread>();
Set<Thread> runningThreads = Thread.getAllStackTraces().keySet();
long instant = System.currentTimeMillis();
for(MyThread el: list)
if(el.start <= instant && el.end >= instant && runningThreads.contains(el.thread))
found.add(el.thread);
return found;
}
編集:
目標は、return all running threads at some time t.
私のソリューションがtime t
関数が呼び出された時間(プラス/マイナスエラー)であると想定することです。したがって、long instant = System.currentTimeMillis();
呼び出し元が任意の時間を指定することは可能ですか?はいの場合、質問は実際にはスレッド自体とは関係がないため、実際のを取得する必要はありませんrunningThreads
。
別のポイント:スレッドが生きているという理由だけで、それは実行されていますか?