J'effectue une tâche dans une boucle. Je dois diviser cette boucle de 1,2 million en plusieurs threads. Chaque thread aura un résultat dans la liste. Lorsque tous les threads sont terminés, j'ai besoin d'ajouter toutes les données de la liste des threads dans une liste commune. Je ne peux pas utiliser ExecutorService. Comment puis-je faire ceci?Comment diviser une énorme boucle en plusieurs threads, puis ajouter le résultat à la collecte?
Il devrait être compatible avec jdk 1.6.
C'est ce que je fais en ce moment:
List<Thread> threads = new ArrayList<Thread>();
int elements = 1200000;
public void function1() {
int oneTheadElemCount = 10000;
float fnum_threads = (float)elements/(float)oneTheadElemCount ;
String s = String.valueOf(fnum_threads);
int num_threads = Integer.parseInt(s.substring(0, s.indexOf("."))) + 1 ;
for(int count =0 ; count < num_threads ; count++) {
int endIndex = ((oneTheadElemCount * (num_threads - count)) + 1000) ;
int startindex = endIndex - oneTheadElemCount ;
if(count == (num_threads-1))
{
startindex = 0;
}
if(startindex == 0 && endIndex > elements) {
endIndex = elements -1 ;
}
dothis(startindex,endIndex);
}
for(Thread t : threads) {
t.run();
}
}
public List dothis(int startindex, int endIndex) throws Exception {
Thread thread = new Thread(new Runnable() {
@Override
public void run() {
for (int i = startindex;
(i < endIndex && (startindex < elements && elements)) ; i++)
{
//task adding elements in list
}
}
});
thread.start();
threads.add(thread);
return list;
}
Considéré dans les flux parallèles? –
Lisez sur fourche/join, ou Spliterators dans Java 8. – BarrySW19
il devrait être compatible avec jdk1.6 – user3098231