任务:运行 每 x 分钟执行一组操作
Tasking : Run a set of actions every x minutes
我必须处理 Twitter 中的速率限制 API。
为了不被屏蔽,我选择使用任务
我想知道是否有任何方法可以每 x 分钟执行一组操作(调用不同的方法)?
比如我每15分钟可以发出80个请求。假设我必须调用方法 a() 和 b() ;分别是120次和80次
我必须完成任务:
a() 被调用:80 次
...等待 15 分钟
a() 被调用:40 次
b() 被调用:40 次
...等待 15 分钟
b() 被调用:40 次
您可以使用 Java EE Conccurency Utilities ManagedScheduledExecutorService API.
完成此操作
您有两种适用于您的用例的方法:
scheduleAtFixedRate(Runnable r, long initDelay, long period, TimeUnit unit)
scheduleWithFixedDelay(Runnable r, long initDelay, long period, TimeUnit unit)
这两者之间的唯一区别是 scheduleAtFixedRate
将 运行 每 period
TimeUnit's。而 scheduleWithFixedDelay
将 运行 period
TimeUnit 的 在 之前的执行完成之后。因此,如果您的任务 运行 非常快,那么这两种方法本质上是相同的。
注意: API 是在 Java EE 7 中引入的。如果你在 运行 EE 6 或更低版本上使用,请使用Java SE 的 ScheduledExecuorService 代替。
在JavaEE环境下获取实例:
注入它:
@Resource
ManagedScheduledExecutorService scheduledExec;
或查找:
ManagedScheduledExecutorService scheduledExec =
(ManagedScheduledExecutorService) new InitialContext.lookup(
"java:comp/DefaultManagedScheduledExecutorService");
使用方法:
// Sample runnables
// Call a() 80 times
Runnable a = new Runnable(){
public void run() {
for(int i = 0; i < 80; i++)
a();
}
};
// Call b() 120 times
Runnable b = new Runnable(){
public void run() {
for(int i = 0; i < 120; i++)
b();
}
};
// Submit and run. Will repeat every 15 minutes until cancelled
scheduledExec.scheduleWithFixedDelay(a, 0, 15, TimeUnit.MINUTES);
scheduledExec.scheduleWithFixedDelay(b, 0, 15, TimeUnit.MINUTES);
// scheduleWithFixedDelay also returns a ScheduledFuture,
// which can be used to monitor and cancel your tasks
ScheduledFuture<?> future = managedExec.scheduleWithFixedDelay(...);
future.cancel(true);
我必须处理 Twitter 中的速率限制 API。
为了不被屏蔽,我选择使用任务
我想知道是否有任何方法可以每 x 分钟执行一组操作(调用不同的方法)?
比如我每15分钟可以发出80个请求。假设我必须调用方法 a() 和 b() ;分别是120次和80次
我必须完成任务:
a() 被调用:80 次 ...等待 15 分钟 a() 被调用:40 次 b() 被调用:40 次 ...等待 15 分钟 b() 被调用:40 次
您可以使用 Java EE Conccurency Utilities ManagedScheduledExecutorService API.
完成此操作您有两种适用于您的用例的方法:
scheduleAtFixedRate(Runnable r, long initDelay, long period, TimeUnit unit)
scheduleWithFixedDelay(Runnable r, long initDelay, long period, TimeUnit unit)
这两者之间的唯一区别是 scheduleAtFixedRate
将 运行 每 period
TimeUnit's。而 scheduleWithFixedDelay
将 运行 period
TimeUnit 的 在 之前的执行完成之后。因此,如果您的任务 运行 非常快,那么这两种方法本质上是相同的。
注意: API 是在 Java EE 7 中引入的。如果你在 运行 EE 6 或更低版本上使用,请使用Java SE 的 ScheduledExecuorService 代替。
在JavaEE环境下获取实例:
注入它:
@Resource
ManagedScheduledExecutorService scheduledExec;
或查找:
ManagedScheduledExecutorService scheduledExec =
(ManagedScheduledExecutorService) new InitialContext.lookup(
"java:comp/DefaultManagedScheduledExecutorService");
使用方法:
// Sample runnables
// Call a() 80 times
Runnable a = new Runnable(){
public void run() {
for(int i = 0; i < 80; i++)
a();
}
};
// Call b() 120 times
Runnable b = new Runnable(){
public void run() {
for(int i = 0; i < 120; i++)
b();
}
};
// Submit and run. Will repeat every 15 minutes until cancelled
scheduledExec.scheduleWithFixedDelay(a, 0, 15, TimeUnit.MINUTES);
scheduledExec.scheduleWithFixedDelay(b, 0, 15, TimeUnit.MINUTES);
// scheduleWithFixedDelay also returns a ScheduledFuture,
// which can be used to monitor and cancel your tasks
ScheduledFuture<?> future = managedExec.scheduleWithFixedDelay(...);
future.cancel(true);