我需要: 1.有热线程(它们总是存在,它们的数量事先已知)和自由线程(超时到期时中断)。
我实施。 1. HotThread类实现了Runnable。 2. FreeThread类扩展了HotThread(添加了一个计时器)。 3.将ThreadPool作为规划器。有方法:addFreeThread(),cancelTask(int id)。
我的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类的实例中启动,我似乎已经丢失了。当我开始免费线程时我就知道了。但现在我不知道在哪里找到它。
Runnable的实现让我很困惑。也许我可以从线程中提取ft?似乎不可能。我应该把它保存在ThreadPool中。看起来很麻烦,因为我已经在线程及其id保持HashMap。我不想保留另一个HashMap来保存id及其fts。
你可以给我一个暗示吗?答案 0 :(得分:0)
我无法在运行时获得Thread
Runnable
目标。您可以延长Thread
而不是实施Runnable
,也可以分别保留FreeThread
的地图。
答案 1 :(得分:0)
您的FreeThread.startTimer(Thread t)
方法接收线程的句柄,保存并稍后使用它来中断/取消。然后你的ThreadPool会将中断/取消委托给FreeThread,或者只是向FreeThread询问保存的线程句柄。