Executor and Daemon in Java

daemon, executor, java, multithreading

Solution

If you're using a scheduled executor, you can provide a ThreadFactory. This is used to create new Threads, and you can modify these (e.g. make them daemon) as you require.

EDIT: To answer your update, your `ThreadFactory` just needs to implement `newThread(Runnable r)` since your `WebRunnable` is a `Runnable`. So no real extra work.

Problem

I have a MyThread object which I instantiate when my app is loaded through the server, I mark it as a Daemon thread and then call `start()` on it. The thread is meant to sit and wait for information from a queue as long as the application is active. My problem/question is this: Currently MyThread is extending Thread because I mark it as Daemon and I read about how it's more prefferable to implement Runnable and to use Executors. So what I wanted to ask is if MyThread will implement Runnable instead of extending Thread (and of course will be renamed) and I'll use `newSingleThreadScheduledExecutor()` how, what or maybe where, do I mark something as Daemon. I hope I haven't made a mess of terms, please excuse me if I have as some parts of the multithreading environment are very new to me. Thanks Ittai Update: The module I'm referring to in my app is a web-app which has a few threads actually of this sort and what they do have in common is that they all in the `ServletContext` as a member for various reasons. Currently I extend `Thread` to `WebThread` which has the `ServletContext` as a memebr and all subclasses can utilize this. If I switch over to the Runnable paradigm with the Executor and ThreadFactory than basically I need to have an ugly hybrid of `WebRunnable` which implements `Runnable` and has the `ServletContext` as a public member and have my `ThreadFactory` implement `newThread(WebRunnable arg0)` in addition to `newThread(Runnable arg0)`. I'm not sure what's best. Thanks

Original source