小编Anu*_*pam的帖子

在多个java线程之间共享数据并获取更新的值

我想创建一个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 multithreading thread-safety

8
推荐指数
1
解决办法
1103
查看次数

使用给定的延迟调度特定时间间隔的java进程

我们希望安排一个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)

有更好的方法吗?

java schedule scheduler scheduled-tasks

6
推荐指数
1
解决办法
1075
查看次数