ScheduledExecutorService or ScheduledThreadPoolExe

2019-04-05 03:05发布

问题:

I'm building an Android App which have to periodically do something in a Service. And I found that using ScheduledThreadPoolExecutor and ScheduledExecutorService is preferable to Timer.

Can anyone explain the difference between ScheduledExecutorService and ScheduledThreadPoolExecutor and which one is more suitable for Android?

Update

I just found this article and this post explain the difference between several way to implement repeating periodic tasks. In my case, ScheduledThreadPoolExecutor and AlarmManager is more suitable.

回答1:

ScheduledExecutorService is an interface (a contract) and ScheduledThreadPoolExecutor implements that interface.

Since you cannot directly instantiate an interface, you have to use implementation through instantiating ScheduledThreadPoolExecutor directly or through means of factory method such as java.util.concurrent.Executors that returns an instance of ScheduledThreadPoolExecutor.

e.g

ScheduledExecutorService scheduler =
 Executors.newScheduledThreadPool(1);

scheduler.scheduleAtFixedRate(beeper, 10, 10, SECONDS); //returns a ScheduledFuture

Have a look at Scheduled Executor Service Usage for Andriod



回答2:

This is the same, ScheduledThreadPoolExecutor is an implementation of ScheduledExecutorService



回答3:

Creating ScheduledThreadPoolExecutor Using Executors

you can also look this one

http://tutorials.jenkov.com/java-util-concurrent/scheduledexecutorservice.html

if you want to use it periodically, you should use this method

scheduleAtFixedRate (Runnable, long initialDelay, long period, TimeUnit timeunit)