Matrizenberechnung mit Multithreads

n0v@

Neues Mitglied
Hallo Community, ich habe ein kleines Problem beim initalisieren von meinen Threads in mein Programm. Soweit steht das Berechnen der Matrix, Erg ist soweit auch richtig. Nun sollte ich per Eingabe auswählen können wieviel Threads ich laufen lassen möchte. Ich hab mir vorgenommen das ich ein, drei oder neun threads gleichzeitig laufen lassen will. Nur wie gehe ich weiter vor, (implements Runnable) Pack ich das ganze unten vor meiner "for" schleife rein? Danke für die Hilfestellung!

Java:
class Main 
{
	public static void main(String[] args)
	{

	int[][] matrixA =	
				{{1,-2,3},
				{-2,3,0},
				{4,-1,2}};

	int[][] matrixB =	{{2,-4,-1},
						{-1,1,-2},
						{5,0,3}};

int[][] ergebnis_multi = new int[3][3];

for(int i = 0; i < matrixA.length; i++)
{
    for(int j = 0; j < matrixB[0].length; j++)
    {
        for(int k = 0; k < matrixA[0].length; k++)
        {
        	ergebnis_multi[i][j] += matrixA[i][k] * matrixB[k][j];
        }
    }
}
for(int i=0; i<3; i++)
{
	for(int j=0; j<3; j++)
		System.out.print(ergebnis_multi[i][j] + "  ");
	System.out.println("");
		}
	}
}
 

Marco13

Top Contributor
Im Einfachsten Fall (3x3-Matrix mit 9 Threads) könnte man GANZ grob ankizziert sowas machen wie
Java:
private Runnable createRunnable(final int i, final int j)
{
    return new Runnable()
    {
        public void run()
        {
            for(int k = 0; k < matrixA[0].length; k++)
            {
                ergebnis_multi[i][j] += matrixA[i][k] * matrixB[k][j];
            }
        }

    };
}
(die Matrizen müssen dazu als instanzvariablen irgendwie sichtbar sein, oder auch übergeben werden)

Das ganze könnte man dann mit
Java:
for(int i = 0; i < matrixA.length; i++)
{
    for(int j = 0; j < matrixB[0].length; j++)
    {
        Thread t = new Thread(createRunnable(i,j));
        t.start();
    }
}
lostreten. Aber das soll wirklich nur eine GANZ grobe Andeutung sein. Allgemein: Jedes Runnable braucht Zugrif auf die Eingabe und Ausgabe, und muss wissen, welchen Bereich es bearbeiten soll...
 

Ark

Top Contributor
Vielleicht solltest du erst einmal auf höherer Ebene betrachten:

Warum Multithreading? Gibt es viele Matrizen zu multiplizieren? Dann gib lieber jedem Thread nacheinander ganze Matrizen zum Multiplizieren (und nicht etwa einem Thread nur eine Zeile/Spalte). Sind die Matrizen wahnsinnig groß? Dann schau mal nach, ob du den Strassen-Algorithmus hinkriegst. (Es soll mich nicht wundern, wenn es bereits fertige Bibliotheken dazu in Java gibt.)

Beachte, dass Multithreading die Sache nicht unbedingt schneller macht. Den Start eines Threads kannst du dir in etwa vorstellen wie das Starten einer Rakete ins All: So etwas ist mit erheblichem Aufwand verbunden und sollte nur eingesetzt werden, wenn es sich auch lohnt. Thread-Pools sind dann auf jeden Fall dem permanenten Neuerstellen von Threads vorzuziehen.

Objektorientierung könnte bei der Implementierung auch hilfreich sein.

Ark
 
Zuletzt bearbeitet:
Ähnliche Java Themen
  Titel Forum Antworten Datum
E Multithreads Java Basics - Anfänger-Themen 12

Ähnliche Java Themen

Neue Themen


Oben