ScheduledExecutorService 或 ScheduledThreadPoolExecutor
ScheduledExecutorService or ScheduledThreadPoolExecutor
我正在构建一个 Android 应用程序,它必须定期在服务中执行某些操作。而且我发现使用 ScheduledThreadPoolExecutor
和 ScheduledExecutorService
比 Timer
更可取。
谁能解释一下ScheduledExecutorService
和ScheduledThreadPoolExecutor
的区别,哪个更适合Android?
更新
我刚刚发现 this article and this post 解释了几种实现重复周期性任务的方法之间的区别。就我而言,ScheduledThreadPoolExecutor
和 AlarmManager
更合适。
这个是一样的,ScheduledThreadPoolExecutor
是ScheduledExecutorService
的一个实现
Creating ScheduledThreadPoolExecutor Using Executors
你也可以看看这个
http://tutorials.jenkov.com/java-util-concurrent/scheduledexecutorservice.html
如果你想定期使用它,你应该使用这个方法
scheduleAtFixedRate (Runnable, long initialDelay, long period, TimeUnit timeunit)
ScheduledExecutorService
是一个接口(合同),ScheduledThreadPoolExecutor
实现了该接口。
因为不能直接实例化一个接口,所以只能通过实例化ScheduledThreadPoolExecutor
直接使用实现,或者通过工厂方法,比如java.util.concurrent.Executors
,returns实例化ScheduledThreadPoolExecutor
.
例如
ScheduledExecutorService scheduler =
Executors.newScheduledThreadPool(1);
scheduler.scheduleAtFixedRate(beeper, 10, 10, SECONDS); //returns a ScheduledFuture
一个简单的例子希望它能有所帮助
public class MyTask implements Runnable {
public MyTask() {
}
public void run() {
System.out.println(Thread.currentThread().getName());
System.out.println("File uploading is start1");
System.out.println("file uploaded");
}
}
public class ScheduledExecutorsTest {
public ScheduledExecutorsTest() {
}
/**
* @param args the command line arguments
*/
public static void main(String[] args) {
int time = 10 ;
ScheduledExecutorService scheduledExecutorService = Executors.newScheduledThreadPool(1);
MyTask myTask = new MyTask();
//scheduledExecutorService.scheduleAtFixedRate(myTask, 0L, 9L, TimeUnit.SECONDS);
scheduledExecutorService.schedule(myTask, 3L, TimeUnit.SECONDS);
scheduledExecutorService.shutdown();
}
}
我正在构建一个 Android 应用程序,它必须定期在服务中执行某些操作。而且我发现使用 ScheduledThreadPoolExecutor
和 ScheduledExecutorService
比 Timer
更可取。
谁能解释一下ScheduledExecutorService
和ScheduledThreadPoolExecutor
的区别,哪个更适合Android?
更新
我刚刚发现 this article and this post 解释了几种实现重复周期性任务的方法之间的区别。就我而言,ScheduledThreadPoolExecutor
和 AlarmManager
更合适。
这个是一样的,ScheduledThreadPoolExecutor
是ScheduledExecutorService
Creating ScheduledThreadPoolExecutor Using Executors
你也可以看看这个
http://tutorials.jenkov.com/java-util-concurrent/scheduledexecutorservice.html
如果你想定期使用它,你应该使用这个方法
scheduleAtFixedRate (Runnable, long initialDelay, long period, TimeUnit timeunit)
ScheduledExecutorService
是一个接口(合同),ScheduledThreadPoolExecutor
实现了该接口。
因为不能直接实例化一个接口,所以只能通过实例化ScheduledThreadPoolExecutor
直接使用实现,或者通过工厂方法,比如java.util.concurrent.Executors
,returns实例化ScheduledThreadPoolExecutor
.
例如
ScheduledExecutorService scheduler =
Executors.newScheduledThreadPool(1);
scheduler.scheduleAtFixedRate(beeper, 10, 10, SECONDS); //returns a ScheduledFuture
一个简单的例子希望它能有所帮助
public class MyTask implements Runnable {
public MyTask() {
}
public void run() {
System.out.println(Thread.currentThread().getName());
System.out.println("File uploading is start1");
System.out.println("file uploaded");
}
}
public class ScheduledExecutorsTest {
public ScheduledExecutorsTest() {
}
/**
* @param args the command line arguments
*/
public static void main(String[] args) {
int time = 10 ;
ScheduledExecutorService scheduledExecutorService = Executors.newScheduledThreadPool(1);
MyTask myTask = new MyTask();
//scheduledExecutorService.scheduleAtFixedRate(myTask, 0L, 9L, TimeUnit.SECONDS);
scheduledExecutorService.schedule(myTask, 3L, TimeUnit.SECONDS);
scheduledExecutorService.shutdown();
}
}