首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >实现Runnable时

实现Runnable时
EN

Stack Overflow用户
提问于 2014-03-24 18:57:09
回答 2查看 53关注 0票数 0

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

我执行。1.类HotThread实现了Runnable。2.类FreeThread扩展了HotThread (添加了一个计时器)。3. ThreadPool类规划师。有方法: addFreeThread(),cancelTask(int )。

我的addFreeThread看起来是这样的:

代码语言:javascript
复制
public void addFreeThread() {
        FreeThread ft = new FreeThread(timeout);
        Thread t = new Thread(ft);                
        ft.startTimer(t);
    }

现在我开始实现cancelTask:

代码语言:javascript
复制
public void cancelTask(int id) {
        ... // get Thread threadToCancel from the ThreadPool.
        threadToCancel.interrupt();        

    }

比看起来好多了。但是定时器仍然在一个单独的线程中运行。Timer是在FreeThread类的一个实例中启动的,我似乎丢失了这个实例。当我开始一个免费线程的时候我就知道了。但现在我不知道在哪里能找到它。

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

你能给我个提示吗?

EN

回答 2

Stack Overflow用户

回答已采纳

发布于 2014-03-24 19:03:38

我不知道如何在运行时获得ThreadRunnable目标,您可以扩展Thread而不是实现Runnable,或者可以单独保存FreeThread的映射。

票数 0
EN

Stack Overflow用户

发布于 2014-03-24 19:15:50

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

票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/22618206

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档