So, let's say I have the following ScheduledExecutorService:    
public class Foo
{
        private ScheduledExecutorService exec;
        public Foo()
        {
            exec = Executors.newScheduledThreadPool(NUM_OF_TASKS);
        }
        public void executeOnce()
        {
            exec.schedule(new Runnable(){
                @Override
                public void run()
                {
                    Foo.this.doSomething();
                }}, DELAY, TimeUnit.MILLISECONDS);
        }
}
Now, exec is used to execute periodic tasks (e.g. directory polling, and etc). But, there's this one task (i.e. executeOnce) that is executed once, but requires a delay. So, I chose to use exec to execute this task, but is this good design? Instead, should I have created a newSingleThreadExe开发者_开发技巧cutor, and then subsequently called shutdown? For instance,
public void executeOnce()
{
    // Execute task and wait 'til completion      
    ExecutorService exec = Executors.newSingleThreadExecutor();
    try {
        exec.submit(new Runnable(){
            @Override
            public void run() 
            {   
                try 
                {
                    Thread.sleep(DELAY);
                } catch (InterruptedException e) {
                }
                Foo.this.doSomething()
            }   
        }).get();
    } catch (InterruptedException e) {
    } catch (ExecutionException e) {
    }
    // Shutdown executor service    
    exec.shutdownNow();        
 }
Are there any benefits implementing the latter?
If the regular tasks and the one-time task are related in some way and the scheduling of the regular tasks is not as critical that a (possible) delay in their execution is a problem, then I'd simply execute the one-time task on the same executor.
The advantage of using a separate executor would be that the regular tasks are scheduled without interference. However shutdownNow() would almost certainly not have the desired effect here, a simple shutdown() would be more appropriate.
If exec is reused for other tasks, the initial piece strikes me as more elegant. Creation of a thread is a non-trivial task, even the runnable is only being executed once, the general approach to threading is to creaate a single thread pool and throw runnables at them. Makes life easier, centralizes thread pools, etc...
 
         
                                         
                                         
                                         
                                        ![Interactive visualization of a graph in python [closed]](https://www.devze.com/res/2023/04-10/09/92d32fe8c0d22fb96bd6f6e8b7d1f457.gif) 
                                         
                                         
                                         
                                         加载中,请稍侯......
 加载中,请稍侯......
      
精彩评论