Java 在实现Runnable时

Java 在实现Runnable时,java,multithreading,Java,Multithreading,我需要: 1.有热线程(它们总是存在,它们的数量事先就知道)和空闲线程(超时过期时中断) 我执行。 1.类HotThread实现可运行。 2.类FreeThread扩展了HotThread(添加了一个计时器)。 3.将ThreadPool列为计划器。具有以下方法:addFreeThread()、cancelTask(int-id) 我的addFreeThread如下所示: public void addFreeThread() { FreeThread ft = new Free

我需要: 1.有热线程(它们总是存在,它们的数量事先就知道)和空闲线程(超时过期时中断)

我执行。 1.类HotThread实现可运行。 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();        

    }
看起来很棒。但计时器仍在单独的线程中运行。计时器是在FreeThread类的一个实例中启动的,我似乎已经丢失了它。当我开始使用免费线程时我就知道了。但现在我不知道在哪里可以找到它

Runnable的实现让我很困惑。也许我可以从线中提取ft?似乎不可能。我把它放在一个游泳池里好吗。看起来很麻烦,因为我已经把HashMap和线程及其id保存在那里了。我不想保留另一个HashMap来保存ID和它们的fts


你能给我一个提示吗

据我所知,无法在运行时获得
线程的
可运行目标。您可以扩展
Thread
而不是实现
Runnable
,或者您可以单独保留
FreeThread
的映射。

您的
FreeThread.startTimer(Thread t)
方法接收线程句柄,保存它,稍后使用它来中断/取消。然后,您的线程池会将中断/取消委托给FreeThread,或者直接向FreeThread请求保存的线程句柄。

@Roberto Sánchez,不,我不会这么说。我需要关于如何取消计时器的帮助。然而,这里讨论了更一般的问题。为什么不让自由线程运行自己的计时器呢?这样它就可以在计时器过期时自动取消。