Voglio creare un'applicazione java, dove vogliamo effettuare chiamate di riposo per più utenti, con l'aiuto di un token di accesso. Sto usando 1 thread per utente. Il token di accesso, che sto utilizzando, è valido per 1 ora. Una volta scaduto il token, ricevo un errore 401 e devo aggiornare il token per tutti i thread e continuare. Sto pensando di utilizzare una variabile volatile che ho reso statico per aggiornare tutti i thread. Il mio requisito è che, nel momento in cui viene a sapere in uno dei thread che il token è scaduto, voglio che tutti i thread interrompano l'elaborazione e attendi che venga generato il nuovo token (questo richiede un paio di secondi). Anche una volta generato, il il token deve essere aggiornato automaticamente, senza che ogni thread abbia esito negativo a causa del token scaduto. ciCondivisione di dati tra più thread java e ottenere il valore aggiornato
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 , call getToken again. Pause all the running threads , and
// update the token for all threads
TokenGenerator.getToken();
}
}
class TokenGenerator {
public static volatile String token;
public static void getToken() {
token = "new Token everytime";
}
}
è un approccio migliore a questo problema:
seguito è riportato un esempio di codice che ho scritto? Il codice sopra non soddisfa il mio caso d'uso, poiché una volta che un thread inizia a generare un nuovo token, tutti gli altri thread non vengono messi in pausa. Richiesta di suggerire alcuni miglioramenti ..
mi corregga se sto compagno sbagliato, si vuole in sostanza tutte le discussioni aspettare fino a quando uno di essi aggiorna il tuo token vero? – nafas
sì..questo è esattamente ciò che voglio ... nel caso in cui uno dei thread ottenga un nuovo token, voglio che quel valore sia aggiornato per tutti i thread, indipendentemente da dove sia l'esecuzione del singolo thread, non dovrebbe provare mai per usare il vecchio token e fallire e creare nuovamente il token ... – Anupam