实现Runnable时

时间:2014-03-24 18:57:09

标签: java multithreading

我需要: 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。

你可以给我一个暗示吗?

2 个答案:

答案 0 :(得分:0)

我无法在运行时获得Thread Runnable目标。您可以延长Thread而不是实施Runnable,也可以分别保留FreeThread的地图。

答案 1 :(得分:0)

您的FreeThread.startTimer(Thread t)方法接收线程的句柄,保存并稍后使用它来中断/取消。然后你的ThreadPool会将中断/取消委托给FreeThread,或者只是向FreeThread询问保存的线程句柄。