J'ai vraiment du mal à implémenter cela. J'ai récemment appris le multithreading et j'ai commencé à utiliser le service d'exécution pour exécuter le travail de manière asynchrone.Comment utiliser le service Executor et avoir plusieurs runnable dans java 7
J'ai une situation ici, comme:
final ArrayList<String> sList = new ArrayList<String>();
final ArrayList<String> gList = new ArrayList<String>();
final JSONArray stateId = [JSON ARRAY WITH JSON DATA]
//ExecutorService exec = new FixedThreadPoll(10);
for(String sId : stateId){
for(String sItem : sList){
for(String gItem: gList){
//do an API call
lisA.add(somthing);
}
}
}
et ensuite, je besoin de parcourir la liste et de créer une liste plus à l'intérieur.
for(String a : listA){
for(String sItem : sList){
for(String gItem: gList){
//do an API call
lisB.add(somthing);
}
}
}
Je veux utiliser le service d'exécuteur ici pour les boucles et réduire le temps d'exécution en exécutant la boucle de manière asynchrone. Mais je ne suis pas en mesure de faire that.I ont essayé ce qui suit:
ExecutorService exec = new FixedThreadPoll(10);
for(String sId : stateId){
executor.execute(new Runnable() {
@Override
public void run() {
for(String sItem : sList){
for(String gItem: gList){
//do an API call
lisA.add(somthing);
}
}
});
}
Je dois faire une dernière variable qui je ne peux pas le faire comme la valeur doit être attribuée à chaque fois dans la boucle ou bien je reçois l'erreur suivante: " Cannot refer to the non-final local variable gList defined in an enclosing scope
".
Quelqu'un peut-il m'aider à utiliser le service Executor dans les deux boucles pour faire face à cette tâche s'il vous plaît.avoir passé beaucoup de temps. J'ai compris le concept mais j'ai du mal à le mettre en place.
Votre problème n'est pas lié au multithreading, c'est la règle des classes anonymus: vous devez utiliser la variable locale finale ou la variable d'instance de la classe eclosing dans les classes anonymus. Veuillez écrire un exemple exécutable, car il est difficile de comprendre pourquoi vous ne pouvez pas le faire final. –
@ J-Alex Alors, comment puis-je appeler runnable pour les trois premières boucles afin de compléter la boucle plus rapidement et appliquer la même chose pour les trois dernières boucles? Pouvez-vous s'il vous plaît fournir un exemple de service d'exécution pour compléter ces boucles de manière asynchrone s'il vous plaît? J'apprécierais vraiment avec l'explication. Je suis en train d'avoir du mal à y parvenir. – MSR