我需要: 1.有热线程(它们总是存在,它们的数量是事先知道的)和空闲线程(超时时中断)。
我执行。1.类HotThread实现了Runnable。2.类FreeThread扩展了HotThread (添加了一个计时器)。3. ThreadPool类规划师。有方法: addFreeThread(),cancelTask(int )。
我的addFreeThread看起来是这样的:
public void addFreeThread() {
FreeThread ft = new FreeThread(timeout);
Thread t = new Thread(ft);
ft.startTimer(t);
}现在我开始实现cancelTask:
public void cancelTask(int id) {
... // get Thread threadToCancel from the ThreadPool.
threadToCancel.interrupt();
}比看起来好多了。但是定时器仍然在一个单独的线程中运行。Timer是在FreeThread类的一个实例中启动的,我似乎丢失了这个实例。当我开始一个免费线程的时候我就知道了。但现在我不知道在哪里能找到它。
可运行的实现让我很困惑。也许我可以从线中提取ft?似乎不可能。我把它放在ThreadPool里好吗。看起来很麻烦,因为我已经将HashMap与线程及其id放在一起了。我不想为I和它们的fts保留另一个HashMap。
你能给我个提示吗?
发布于 2014-03-24 19:03:38
我不知道如何在运行时获得Thread的Runnable目标,您可以扩展Thread而不是实现Runnable,或者可以单独保存FreeThread的映射。
发布于 2014-03-24 19:15:50
您的FreeThread.startTimer(Thread t)方法接收线程句柄,保存它,然后使用它中断/取消。然后,您的ThreadPool只需将中断/取消委托给FreeThread,或者只需向FreeThread请求保存的线程句柄。
https://stackoverflow.com/questions/22618206
复制相似问题