Itt*_*tai 11 java multithreading daemon executor
我有一个MyThread对象,当我的应用程序通过服务器加载时,我将其实例化,我将其标记为守护程序线程,然后调用start()它.只要应用程序处于活动状态,该线程就会等待队列中的信息.我的问题/问题是:目前MyThread正在扩展Thread,因为我将它标记为守护进程,并且我读到了如何实现Runnable以及使用Executor更令人满意.所以我想问的是,如果MyThread将实现Runnable而不是扩展Thread(当然会被重命名),我将使用newSingleThreadScheduledExecutor()how,what或者where在哪里标记为Daemon.我希望我没有弄乱一些条款,请原谅我,如果因为多线程环境的某些部分对我来说是非常新的.
谢谢Ittai
更新:我在我的应用程序中引用的模块是一个Web应用程序,它实际上有几个这样的线程,它们的共同点是它们都是ServletContext作为成员出于各种原因.目前,我延长Thread到WebThread它具有ServletContext作为memebr和所有子类可以利用这一点.如果我切换到与执行者了Runnable范式和的ThreadFactory比基本上我需要有一个丑陋的混合动力车WebRunnable,它实现Runnable并具有ServletContext作为公共成员,并且对我的ThreadFactory落实newThread(WebRunnable arg0)除了newThread(Runnable arg0).我不确定什么是最好的.谢谢
Stu*_*son 24
查看JavaDoc newSingleThreadScheduledExecutor(ThreadFactory threadFactory)
它将实现如下:
public class MyClass {
private DaemonThreadFactory dtf = new DaemonThreadFactory();
private ScheduledExecutorService executor =
Executors.newSingleThreadScheduledExecutor(dtf);
// ....class stuff.....
// ....Instance the runnable.....
// ....submit() to executor....
}
class DaemonThreadFactory implements ThreadFactory {
public Thread newThread(Runnable r) {
Thread thread = new Thread(r);
thread.setDaemon(true);
return thread;
}
}
Run Code Online (Sandbox Code Playgroud)
Bri*_*new 12
如果您正在使用预定的执行程序,则可以提供ThreadFactory.这用于创建新的线程,您可以根据需要修改这些线程(例如,使它们成为守护进程).
编辑:要回答您的更新,您ThreadFactory需要实施,newThread(Runnable r)因为您WebRunnable 是一个 Runnable.所以没有真正的额外工作.
| 归档时间: |
|
| 查看次数: |
11914 次 |
| 最近记录: |