Ich habe einen Code, dessen Ausführung ungewöhnlich lange zu dauern scheint. Ich muss die Ausführungsgeschwindigkeit so weit wie möglich reduzieren.
Im Wesentlichen tut der Code Folgendes. Ich erstelle ein Array von Objekten size[10][10][10]. Das Objekt enthält eine Liste von Zahlen wie folgt:
class MyClass{
ArrayList<Integer> numberList;
public MyClass(){
numberList= new ArrayList <Integer> ();
}
}
MyClass storage[][][] = new MyClass[10][10][10];
Ich habe dann den folgenden Code, der den Listen Zahlen hinzufügt
for(int i =0; i < 200000;i++){
for(int j = 0; j < 10; j++){
for(int k = 0; k < 10; k++){
for(int l = 0; l < 10; l++){
storage[j][k][l].numberList.add(i);
}
}
}
}
Ich bin mir ziemlich sicher, dass der größte Teil der Ausführungszeit von der folgenden Zeile stammt
storage[j][k][l].numberList.add(i);
Genauer gesagt ist es die Funktion .add(i) .
Ich bin ziemlich neu in Java, und bin nur vertraut in C++. Wenn ArrayList ist ähnlich wie eine Liste in C++, sicherlich Hinzufügen eines Elements am Ende erfordert sehr wenig CPU-Zeit? Liegt das nur daran, dass ich so viele Hinzufügungsoperationen durchführe (wahrscheinlich eine Million)?
Eine andere Sache, die ich fragen möchte, ist, ob ich dies durch die Verwendung von Threads beschleunigen kann (unter der Annahme eines Dual-Core-Prozessors mit 4 Threads). Ich denke, ich könnte 4 Threads erstellen, die jeweils einen 50.000 Chunk verarbeiten. Ich bin mir jedoch nicht sicher, was die Synchronisierung angeht. Vermutlich müsste ich eine Art gegenseitigen Ausschluss für storage[][][] haben. Muss ich Folgendes schreiben
synchronized(storage)
oder wäre das in Ordnung?
synchronized(storage[j][k][l])
Jede Hilfe ist sehr willkommen
Mit freundlichen Grüßen