Schnellste Methode, ein Array durchzugehen?

NicoHatProbleme2

Bekanntes Mitglied
Hallo,

Ich wollte eine Klasse erstellen, in der man einen Pixelartigen Bildschirm hat... Dafür habe ich einen array benutzt. Jetzt ist aber die Frage, wie ich das am schnellsten durchlaufen kann.
Ich habe jetzt schon das einfache Durchlaufen durch Threads verschnellert, ist aber immer noch nicht genug.
Java:
public void drawPixels() {
        for(int i = 0; i < pixel.length; i++) {
            PixelThread thread = new PixelThread();
            thread.start();
            thread.split(i, pixel);
            /**
            for(int j = 0; j < pixel[i].length; j++) {
                pixel[i][j][0].clear();
                for(int k = 0; k < pixel[i][j].length; k++) {
                    if(visible) pixel[i][j][k].draw();
                }
            }
            **/
        }
    }
    private class PixelThread extends Thread {
        public void run() {
            
        }
        public void split(int i, Pixel[][][] pixel) {
            for(int j = 0; j < pixel[i].length; j++) {
                pixel[i][j][0].clear();
                for(int k = 0; k < pixel[i][j].length; k++) {
                    if(visible) pixel[i][j][k].draw();
                }
            }
        }
    }
 

LimDul

Top Contributor
Hallo,

Ich wollte eine Klasse erstellen, in der man einen Pixelartigen Bildschirm hat... Dafür habe ich einen array benutzt. Jetzt ist aber die Frage, wie ich das am schnellsten durchlaufen kann.
Ich habe jetzt schon das einfache Durchlaufen durch Threads verschnellert, ist aber immer noch nicht genug.
Nein hast du nicht.

Deine Threads machen genau gar nichts.
Du führst alles in einem thread aus. thread.start(); sorgt dafür, dass die Methode run des Threads in einem eigenen Thread ausgeführt wird. Diese Methode macht bei dir genau gar nichts. Die Split Methode wird weiterhin im Hauptthread nur durchlaufen. Du müsstest einen Code in die run Methode verlagern (Oder besser nicht von Thread erben, sondern von Runnable und das erzeugte Runnable Objekt an einen Thread übergeben - das wäre sauberer)
 

KonradN

Super-Moderator
Mitarbeiter
Wenn Du von Thread abeitest und dann eine Instanz erzeugst und start() aufrufst, dann läuft das, was in run() steht, in dem Thread. run ist aber leer und macht nichts. Also machst Du nichts in irgend welchen anderen Threads!

Java:
            PixelThread thread = new PixelThread(); // Hier erzeugst Du eine neue Instanz ...
            thread.start(); // Jetzt wird in einem anderen Thread die run() Methode gestartet
            thread.split(i, pixel); // Auf dem Thread, der halt alle diese Befehle ausgeführt wurde, wird split gemacht.

Also einfach noch einmal das Thema Threads selbst noch einmal durchgehen.

Oder ggf. ist es auch eine Alternative, das z.B. mit Streams zu machen und dann parallele Streams zu verwenden.
 

Neumi5694

Top Contributor
Auf die Frage zur Geschwindigkeit zurückzukommen. Mit for-each oder for-to bist du bei sequentieller Abarbeitung schon ganz gut dabei.
Streams sind im Vergleich arschlangsam, die nur dann verwenden, wenn parallel gearbeitet werden soll. Und auch dann bringt's im Normalfall nur was, wenn die Ausführungszeit jeder Aktion hoch genug ist. Bei einer einfachen Abfrage/Zuweisung-Operation frisst die Verwaltung der Threads viel mehr Zeit, als man durch die Parallelisierung gewinnt.
Auch wenn die verschiedenen Threads eine gemeinsame langsame Komponente haben wie den Zugriff auf's Filesystem, ist der Vorteil dahin, aber in dem speziellen Fall ist es komplett egal, was man macht, was die Geschwindigkeit ausbremst, hat nichts mit der Schleife zu tun.
 

NicoHatProbleme2

Bekanntes Mitglied
Auf die Frage zur Geschwindigkeit zurückzukommen. Mit for-each oder for-to bist du bei sequentieller Abarbeitung schon ganz gut dabei.
Streams sind im Vergleich arschlangsam, die nur dann verwenden, wenn parallel gearbeitet werden soll. Und auch dann bringt's im Normalfall nur was, wenn die Ausführungszeit jeder Aktion hoch genug ist. Bei einer einfachen Abfrage/Zuweisung-Operation frisst die Verwaltung der Threads viel mehr Zeit, als man durch die Parallelisierung gewinnt.
Auch wenn die verschiedenen Threads eine gemeinsame langsame Komponente haben wie den Zugriff auf's Filesystem, ist der Vorteil dahin, aber in dem speziellen Fall ist es komplett egal, was man macht, was die Geschwindigkeit ausbremst, hat nichts mit der Schleife zu tun.
Soll das heißen, dass das mit dem Thread nur langsamer macht?
 

Neumi5694

Top Contributor
Nein, damit hat's nicht viel zu tun. Ein Thread ändert nichts ander Geschwindigkeit.
Dein Thread wird weder etwas schneller noch etwas langsamer machen, er wird dazu führen, dass die Aktion im Hintergrund stattfindet, während das Programm weiterlaufen kann.

Was ich meinte, war das:
Java:
Point[] points = ...;
//for-each, geht bei Arrays und Listen recht schnell
for (var p : points) {
    p.setLocation(p.getX()+1,p.getY()); //Kurze Operation, braucht kaum Rechnezeit
}

//Alternative mit sequentiellem Stream, sehr sehr langsam im Vergleich
Arrays.stream(points).forEach( p-> p.setLocation(p.getX()+1,p.getY()));

//Alternative mit parallelem Stream. Es werden zwar mehrere Punkte gleichzeitig verändert, die Verwaltung der Threads und des Streams hebt diesen Vorteil aber wieder auf.
Arrays.asList(points).parallelStream().forEach( p-> p.setLocation(p.getX()+1,p.getY()));
 
Zuletzt bearbeitet:

Jw456

Top Contributor
Hallo mit deinem Algorithmus wirst du auch nicht schneller werden.

Du geht ja auch wenn du 10 Threads benutzt jedes Pixel von deinem Array durch.

Um Geschwindigkeit zugewinnen musst du das schon sinnvoll aufteilen so das nicht jeder Thread alles bearbeitet.

Wenn der erste Thread zb den ersten Teil des Arrays durchgeht und ein zweiter den zweiten Teil des Arrays, dann wird das schneller werden. Wenn jeder Thread immer alles macht bestimmt nicht.

Wenn zwei Mann einen Sandhaufen umschaufeln. Bearbeiten beide ja nur die Hälfte von Ganzen.
 
Zuletzt bearbeitet:

Neumi5694

Top Contributor
Java:
class MyThread extends Thread{
    private E[] myArray;
    MyThread(E[] array) {
        this.myArray = array;
    }
    public void run() {
        doSomethingImportantWithMyArray();
    }
    private void doSomethingImportantWithMyArray() {
        //...
    }
}
//Threads mit TeilArrays erstellen
MyThread t1 = new MyThread(firstThirdOfTheArray);
MyThread t2 = new MyThread(secondThirdOfTheArray);
MyThread t3 = new MyThread(lastThirdOfTheArray);
//Threads starten
t1.start();
t2.start();
t3.start();
//darauf warten, dass sie beendet werden, die Reihenfolge der join() Befehle ist irrelevant, du wartest eh auf alle 3
t1.join();
t2.join();
t3.join();
System.out.println("done");
 
Ähnliche Java Themen
  Titel Forum Antworten Datum
C Die schnellste Collection-Klasse ? Allgemeine Java-Themen 37
T Schnellste Möglichkeit Datenverarbeitung Allgemeine Java-Themen 5
M Schnellste Collection/Liste Allgemeine Java-Themen 15
N Schnellste Art Strings in eine Datei zu schreiben Allgemeine Java-Themen 7
N Schnellste Art Dateien zu kopieren Allgemeine Java-Themen 16
W Hilfe bei Methode Allgemeine Java-Themen 14
Ü Methoden Arrays vergleichen - Methode Allgemeine Java-Themen 1
Simon16 compareTo Methode überschreiben Allgemeine Java-Themen 4
TheSkyRider Methode über DataInputStream "auslösen" Allgemeine Java-Themen 6
M CrudRepository save Methode mocken Allgemeine Java-Themen 6
thor_norsk toString() - Methode Allgemeine Java-Themen 6
A Clean Code: Variable vs. Methode Allgemeine Java-Themen 8
Encera Zweite Main-Methode zuschalten Allgemeine Java-Themen 18
M Optimierung einer Methode (byte-Geraffel) Allgemeine Java-Themen 2
I Hibernate Envers - Aufruf der Methode zum Speichern selbst ausführen oder managen? Allgemeine Java-Themen 0
N rekursion mehrfach eine Methode Öffnen Allgemeine Java-Themen 4
berserkerdq2 Wenn ich eine Methode nur jede 50ms ausführen will, wie mach ich das? Allgemeine Java-Themen 4
berserkerdq2 run-methode eines Threads so programmieren, dass 30x die Sekunde etwas ausgeführt wird. Allgemeine Java-Themen 44
E Methoden abstract static Methode Allgemeine Java-Themen 8
E Eine Methode einer extendeten Klasse deakitivieren Allgemeine Java-Themen 12
F Getter Methode aufrufen funktioniert nicht Allgemeine Java-Themen 1
B In Java Methode mit generic input und output basteln? Allgemeine Java-Themen 4
goldmensch Datentypen Welche Methode hat die bessere Performance? Allgemeine Java-Themen 12
R Lambda Expression in einer Methode execute() aufrufen (execute() ist eine Methode aus dem funktionalen Interface Command) Allgemeine Java-Themen 5
T C++ Methode Übersetzung in Java Allgemeine Java-Themen 3
L Erste Schritte TDD testen einer Methode mit injezierten Services? Allgemeine Java-Themen 12
R @author vor Methode (eclipse) Allgemeine Java-Themen 1
J RotSchwarzBaum: Löschen mittels insert-Methode Allgemeine Java-Themen 20
Y Java Bruttoberechnen + runden Methode Allgemeine Java-Themen 1
R Warum ist die Methode unendlich oft rekursiv? Allgemeine Java-Themen 5
R Methoden Was fehlt mir bzw. muss ich bei der Methode countHarshabNumbers ändern damit ich die Harshad Zahlen im Intervall [51, 79] zählen kann? Allgemeine Java-Themen 19
D ArrayListe delete Methode klappt nicht Allgemeine Java-Themen 12
Drachenbauer Wie finde ich den Aufrufer zu einer Methode, die sich nicht in meinem Projekt befindet? Allgemeine Java-Themen 2
A Ist ein enum hier richtig? Enum toString() Methode. Allgemeine Java-Themen 1
Scream_ilias brute force methode verbessern? Allgemeine Java-Themen 6
Scream_ilias passwort meines pc per brute force methode knacken Allgemeine Java-Themen 4
S static methode im Interface Allgemeine Java-Themen 1
M Konstruktor einer Methode Allgemeine Java-Themen 35
A HashMap Methode "get()"-Problem Allgemeine Java-Themen 28
E Hat der Compiler einen Fehler oder warumbeendet return nicht eine Methode ? Allgemeine Java-Themen 7
T Sinn einer toString Methode Allgemeine Java-Themen 3
T Split() Methode funktioniert nicht?! Allgemeine Java-Themen 11
L Methoden Über Reflections eine Methode mit aufrufen Allgemeine Java-Themen 3
S Kann ich eine Methode schreiben die alle Arten von funktionalen Interfaces akzeptiert..? Allgemeine Java-Themen 21
L ToString-Methode Allgemeine Java-Themen 6
X Datentypen NPE in längerer Methode Allgemeine Java-Themen 12
I Methoden Generics-Methode Allgemeine Java-Themen 3
H Strategy Pattern - changeColor() Methode - input rgd oder hex einlesen Allgemeine Java-Themen 1
T statische Variable und nicht-statische Methode Allgemeine Java-Themen 2
B Aufruf der Methode ergibt eine Exception Allgemeine Java-Themen 13
M Wie kann ich ein int[] Array in einer Methode benutzen? Allgemeine Java-Themen 6
M Wie kann man eine void Methode mit Variablen von zwei verschiedenen Objekten ausführen? Allgemeine Java-Themen 15
F Was ist der Dateityp meines Parameters für die Main Methode. Allgemeine Java-Themen 6
F Variablen Palindromzahl (Probleme mit Methode) Allgemeine Java-Themen 9
B APi methode kurz anhalten Allgemeine Java-Themen 8
P Methode aus anderem Paket aufrufen Allgemeine Java-Themen 1
K ursprüngliche ArrayList ändert sich bei Übergabe in Methode Allgemeine Java-Themen 18
R Rekursive Methode Allgemeine Java-Themen 8
ReinerCoder Methode einer Klasse meldet Fehler "misplaced construct(s)" Allgemeine Java-Themen 13
R Wo ist mein Fehler in der Methode DRINGEND Allgemeine Java-Themen 9
I Collection - contains-Methode überschreiben (anonyme innere Klasse) Allgemeine Java-Themen 4
E RMI NULL-Pointer-Exeception wenn der RMI-Proxy eine Methode deligiert Allgemeine Java-Themen 2
S Methoden Liste soll Methode aus innerer Klasse aufrufen Allgemeine Java-Themen 4
M Methoden Generische Methode für ArrayList Allgemeine Java-Themen 7
D HTTP Aufruf einer Methode aus einem Servlet heraus Allgemeine Java-Themen 0
C Threads Methode verhält sich merkwürdig Allgemeine Java-Themen 18
R rekursive und iterative Methode Allgemeine Java-Themen 3
P Methoden Anwendung der allMatch()-Methode Allgemeine Java-Themen 5
G Programm, das nach abgearbeiteter main Methode weiterläuft Allgemeine Java-Themen 72
D Methoden Methode zum Steinschnitt Allgemeine Java-Themen 2
U OOP Warum kann ich aus meiner Methode keinen String auslesen Allgemeine Java-Themen 4
T Methoden Methode zum durchsuchen einer ArrayList Allgemeine Java-Themen 8
D Returnwert aus einer Methode gerundet ausgeben lassen Allgemeine Java-Themen 2
S equals-Methode bestimmer Klassen abfangen Allgemeine Java-Themen 2
H Methoden Methode 'updateItem' der Klasse 'TreeCell' Allgemeine Java-Themen 3
snipesss Methode greift nicht auf JTextPanel zu Allgemeine Java-Themen 3
R Methode in Methode voraussetzen Allgemeine Java-Themen 8
S Überschriebene Methode der Oberklasse der Oberklasse aufrufen. Allgemeine Java-Themen 5
D Methode dynamisch aufrufen Allgemeine Java-Themen 2
Sogomn Methode als Parameter? Allgemeine Java-Themen 3
M Eigene forEach()-Methode funktioniert nicht. Allgemeine Java-Themen 2
KaffeeFan Methoden Suche Methode um Programm kurz warten zu lassen Allgemeine Java-Themen 22
G Methoden Aus einem Event, wo ich weiß, dass es ausgeführt werden wird, eine Get-Methode basteln Allgemeine Java-Themen 8
BRoll Methode abbrechen (Invoke von außen) Allgemeine Java-Themen 5
I Methode verallgemeinern (Methode als Parameter)? Allgemeine Java-Themen 10
D generische Interface und konkrete Methode Allgemeine Java-Themen 3
G Threads Methode nebenbei ausführen, Status verarbeiten Allgemeine Java-Themen 4
H FTP Befehl/Java Methode für Submit im z/Os (Host) Allgemeine Java-Themen 1
M Fabrik Methode, gutes Beispiel? Allgemeine Java-Themen 0
M WebService - Zugriff auf Webservice Methode über Browser Allgemeine Java-Themen 1
N WaitForScript- methode in javafx Allgemeine Java-Themen 1
2 jede Stunde Methode ausführen Allgemeine Java-Themen 8
M Eine static-Methode verlassen Allgemeine Java-Themen 2
P "Overriden statische Methode" Statische Methode die vererbt wird Allgemeine Java-Themen 5
X Komponente an Methode übergeben Allgemeine Java-Themen 1
A Methode ergibt Java NullpointerException. Allgemeine Java-Themen 3
S Getestete Methode um das Beste aus URL-Nutzereingaben rauszuholen..? Allgemeine Java-Themen 4
L Methoden Methode gibt mir beim verschlüsseln mit RSA 0 bytes aus ? Allgemeine Java-Themen 1
D Methode mit optionalen Parametern in Interface Allgemeine Java-Themen 3
C DBConnection als Methode in mehreren Klassen Allgemeine Java-Themen 4

Ähnliche Java Themen

Neue Themen


Oben