On 30 September 2010 06:39, Julien Aymé <julien.a...@gmail.com> wrote: > 2010/9/30 sebb <seb...@gmail.com>: >> 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. > > The use case is that someone may want to use an Executor instead of a > dedicated Thread to run background tasks such as Tailer, at least I > do. I have no problem with providing a convenient static method, as > Niall suggested, but I would like to keep the Tailer as a Runnable > with no embedded thread if possible.
OK. So how about allowing the user to pass in an Executor when creating the instance? Would that be sufficient? > HTH, > Julien > >> >> 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 >> >> > > --------------------------------------------------------------------- > To unsubscribe, e-mail: dev-unsubscr...@commons.apache.org > For additional commands, e-mail: dev-h...@commons.apache.org > > --------------------------------------------------------------------- To unsubscribe, e-mail: dev-unsubscr...@commons.apache.org For additional commands, e-mail: dev-h...@commons.apache.org