On 30 September 2010 02:58, Niall Pemberton <niall.pember...@gmail.com> wrote: > On Thu, Sep 30, 2010 at 2:46 AM, sebb <seb...@gmail.com> wrote: >> Just wondering if the Tailer API could be simplified by performing the >> thread start within the class? >> Is it ever going to be useful to have direct access to tailer thread? >> I suspect not, as the Listener should provide sufficient access. >> >> It's not safe to start a thread in the constructor (unless the ctor is >> final), but one could use static factory methods instead. >> >> So instead of: >> >> TailerListener listener = ... >> Tailer tailer = new Tailer(file, listener, delay); >> Thread thread = new Thread(tailer); >> thread.start(); >> ... >> tailer.stop() >> >> one would do something like: >> >> TailerListener listener = ... >> Tailer tailer = Tailer.createTailer(file, listener, delay); >> ... >> tailer.stop() >> >> This simplifies the API, and allows the class to force the thread to >> be a daemon thread. It also stops the caller from messing with the >> thread. >> >> WDYT? > > There are five different Thread constructors that take a Runnable and > a bunch of other methods that someone might want to use. I don't have > a problem providing a convenience static method - but it only saves > two lines of code - as long as they can construct one manually with or > without a Thread if they want to.
But what is the use case for having access to the created thread? Seems to me it would be a lot safer if the thread were private to the class. It would still be possible to use the code without a thread by exposing the method that loops over the file, and using the constructor instead. For example with the current code one could do something like: TailerListener listener = ... Tailer tailer = new Tailer(file, listener, delay); tailer.run() --------------------------------------------------------------------- To unsubscribe, e-mail: dev-unsubscr...@commons.apache.org For additional commands, e-mail: dev-h...@commons.apache.org