I personally would use @ApplicationScoped
not @Singleton
. The lifecycle will shutdown the object when the container shuts down. If you want to start a thread, this would be a likely choice to put the code.
It is not asynchronous by default, so you'll need to start the thread yourself.