给定一个“线程”列表,其中包含 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
.
还有一点:仅仅因为一个线程是活着的,它就在运行吗?