我想创建一个java应用程序,我们希望在访问令牌的帮助下为多个用户进行休息调用.我每个用户使用1个线程.我正在使用的访问令牌有效期为1小时.一旦令牌过期,我将收到401错误,并且必须更新所有线程的令牌,然后继续.我正在考虑使用一个volatile变量,我已经使静态更新所有线程.我的要求是,当我在其中一个线程中知道令牌已过期时,我希望所有线程都停止处理并等待生成新令牌(这需要几秒钟).也一旦生成,应该自动更新令牌,而不会因为过期令牌而导致每个线程失败.
下面是我编写的示例代码:
import java.util.concurrent.Executors;
import java.util.concurrent.ScheduledExecutorService;
import java.util.concurrent.TimeUnit;
public class Sample {
public static void main(String[] args) {
String[] myStrings = { "User1" , "User2" , "User3" };
ScheduledExecutorService scheduledExecutorService = Executors
.newScheduledThreadPool(myStrings.length);
TokenGenerator.getToken();
for(String str : myStrings){
scheduledExecutorService.scheduleAtFixedRate(new Task(str), 0, 5, TimeUnit.SECONDS);
}
}
}
class Task implements Runnable{
private String name;
public Task(String name){
this.name = name;
}
@Override
public void run() {
getResponse(TokenGenerator.token);
}
private void getResponse(String token) {
// Make http calls
// if token expire …Run Code Online (Sandbox Code Playgroud) 我们希望安排一个java进程运行到特定的时间间隔.目前我正在考虑使用TimerTask来安排这个过程.在每个循环的开始,将检查当前时间,然后与给定时间进行比较,并在时间结束时停止该过程.我们的代码如下所示:
import java.util.Timer;
import java.util.TimerTask;
public class Scheduler extends TimerTask{
public void run(){
//compare with a given time, with getCurrentTime , and do a System.exit(0);
System.out.println("Output");
}
public static void main(String[] args) {
Scheduler scheduler = new Scheduler();
Timer timer = new Timer();
timer.scheduleAtFixedRate(scheduler, 0, 1000);
}
}
Run Code Online (Sandbox Code Playgroud)
有更好的方法吗?