Thread - Problem

Status
Nicht offen für weitere Antworten.

MFM

Mitglied
Hi, ich hatte schon einmal ein Thema eröffnet, es ging darum, dass zu einem Array, welches Integerzahlen enthält, die jeweiligen Fibonacci-Zahlen berechnet werden sollen. Zwar in einem separaten Thread für jede Fibozahl

Hier einmal der Code:

Code:
public class FibCalc {

	// tmp-Array für die MultiThreadingMethode
	static int[] mtArray;
	// Thread/Feldcounter für die MultiThreadingMethode
	static int cnt;

	public static int fib(int n) throws FibException {

		// Fehlerbehandlung
		if (n < 0 || n > 40) {
			throw new FibException(n);
		}

		int fibonacci;

		// AbbruchBedingungen
		if (n == 0) {
			return 0;
		}

		if (n == 1) {
			return 1;
		}

		// Rekursionsschritt
		else {
			return fibonacci = fib(n - 1) + fib(n - 2);
		}
	}



	public static int[] fibMT(int numberArray[]) {

		mtArray = new int[numberArray.length]; // <<<--- Liegt hier der Hund begraben??

		// kopiere das übergebene Array in das statische mtArray
		System.arraycopy(numberArray, 0, mtArray, 0, numberArray.length);

		for (int i = 0; i < mtArray.length; i++) {
			cnt = i;
			new Thread(new Runnable() {
				public void run() {
					try {
						mtArray[cnt] = FibCalc.fib(mtArray[cnt]);
					} catch (FibException e) {
						mtArray[cnt] = -1;
						// TODO Auto-generated catch block
						e.printStackTrace();
					}
				}

			}).start();
		}
		return mtArray;
	}
}

Mal davon abgesehen, dass ich nicht weiß, wie das ohne Klassenvariablen gehen soll und das noch nicht synchronisiert ist ...

Wenn ich an die Methode ein Array mit Integerzahlen wie hier in der Testklasse übergebe
, dann passiert da rein garnix :(
Code:
public class TestKlasse {

	public static void main(String[] args) {
		
		int[] array = {40,40,40,40,40,40};
		
		array = FibCalc.fibMT(array);
		
		
		for (int i=0; i<array.length; i++){
			System.out.println(array[i]);
		}

	}

}

Er gibt mir 40,40,40,40,40,40 aus anstatt irgendne Zahl > 1 Mio ...

Liegt es evtl an der ersten Zeile in der fibMT?
mtArray = new int[numberArray.length]; ? Kann es sein, dass hier ein IntArray Objekt angelegt wird, welches rein garnix mit meinem mtArray zu tun hat?

Wie schaffe ich es dann, den übergebenen Array in mtArray zu kopieren?

Wäre echt super, wenn mir jemand helfen könnte
MFM[/code]
 
S

SlaterB

Gast
die Kopie ist gelungen, die Ausgabe erfolgt aber sofort, während die Threads erst paar Sekunden brauchen, um die Zahlen zu berechnen

hier ein paar Verbesserungen, da wäre aber noch viel zu tun,

wichtig: das cnt setzt du ganz falsch ein, am Ende der Schleife ist cnt = mtArray.length-1
und alle Thread verwenden den aktuellen Wert von cnt, nicht den den es irgendwann zwischendurch mal innehatte,

wieso verwendest du überhaupt Threads?
das scheint noch etwas zu kompliziert für dich

Code:
public class Test
{
    public static void main(String[] args)
        throws Exception
    {
        int[] array = {40, 40};

        array = FibCalc.fibMT(array);


        for (int i = 0; i < array.length; i++)
        {
            System.out.println(array[i]);
        }
        Thread.sleep(6000);

        for (int i = 0; i < array.length; i++)
        {
            System.out.println(array[i]);
        }

    }
}


class FibCalc
{


    public static int fib(int n)
        throws Exception
    {
        // Fehlerbehandlung
        if (n < 0 || n > 40)
        {
            throw new Exception("" + n);
        }

        // AbbruchBedingungen
        if (n < 2)
        {
            return n;
        }
        // Rekursionsschritt
        return fib(n - 1) + fib(n - 2);
    }


    public static int[] fibMT(int numberArray[])
    {

        final int[] mtArray = new int[numberArray.length]; // kein Hund begraben

        // kopiere das übergebene Array in das statische mtArray
        System.arraycopy(numberArray, 0, mtArray, 0, numberArray.length);

        for (int i = 0; i < mtArray.length; i++)
        {
            final int threadI = i;
            new Thread(new Runnable()
                {
                    public void run()
                    {
                        System.out.println(System.currentTimeMillis() + ", Thread " + 
                                            threadI + " startet");
                        try
                        {
                            mtArray[threadI] = FibCalc.fib(mtArray[threadI]);
                        }
                        catch (Exception e)
                        {
                            mtArray[threadI] = -1;
                            e.printStackTrace();
                        }
                        System.out.println(System.currentTimeMillis() + ", Thread " + 
                                           threadI + " ist fertig");
                    }

                }).start();
        }
        return mtArray;
    }
}
 

MFM

Mitglied
Werde den Thread nicht pflegen können, da ich bis 18.30 wieder in Vorlesung hocke, also bitte nicht echauffieren, dass ich nen Thread aufmache und nicht antworte.

Bin dennoch für jede zwischenzeitliche Antwort sehr dankbar.

MFM

P.S.:

bezügl. Threads ... das ist eine Vorgabe, da ist nix zu rütteln.
Und das mit dem zeitlichen synchronisieren :) Das wollte ich als nächstes machen. Habe nicht daran, dass es wirklich auch nur daran liegen könnte. Normalerweise teste ich immer wieder, nachdem ich einen "Schritt" weiterprogrammiert habe, bevor ich mich an den nächsten wage ...

:)

Wie gesagt, bis später.

Danke schon mal im Voraus.
 

MFM

Mitglied
hat sich vorerst mal erledigt.

Prof meinte ich solle das nicht mit anonymen Klassen machen, wenn ich ihm nicht genau erklären könne, was das Konstrukt genau macht :)

Werde es anders lösen

Danke SlaterB :)
 
Status
Nicht offen für weitere Antworten.
Ähnliche Java Themen
  Titel Forum Antworten Datum
A Thread-Schreibe-Lese-Problem Java Basics - Anfänger-Themen 4
S Compiler-Fehler Exception in thread "main" java.lang.Error: Unresolved compilation problem: Java Basics - Anfänger-Themen 6
A Problem mit Thread.sleep Java Basics - Anfänger-Themen 4
B Thread Problem Java Basics - Anfänger-Themen 7
G problem mit thread.sleep() Java Basics - Anfänger-Themen 6
T Problem mit Eclipse? Exception in thread "main" java.lang.NullPointerException Java Basics - Anfänger-Themen 4
M Threads Thread.Sleep Problem im Zusammenhang mit GUI/ActionPerformed-Methode Java Basics - Anfänger-Themen 4
H Threads Problem bei Thread + Innere Klasse Java Basics - Anfänger-Themen 3
F thread problem Java Basics - Anfänger-Themen 3
D Problem mit interrupt() thread Java Basics - Anfänger-Themen 4
G Problem Thread und Monitoring Java Basics - Anfänger-Themen 3
P Problem beim Thread Java Basics - Anfänger-Themen 20
kulturfenster Problem mit Thread + Interface Java Basics - Anfänger-Themen 4
S problem mit repaint() in Thread Java Basics - Anfänger-Themen 6
A Problem zweitem Thread in Applet Java Basics - Anfänger-Themen 12
G Problem mit Thread Sleep! Java Basics - Anfänger-Themen 3
G Problem mit Thread Java Basics - Anfänger-Themen 6
G Thread-Problem, glaube ich? Java Basics - Anfänger-Themen 5
G Thread Problem Java Basics - Anfänger-Themen 13
A Do/While Problem (Exception in thread "main" java. Java Basics - Anfänger-Themen 4
G Thread Problem Java Basics - Anfänger-Themen 2
P Problem mit Thread - cannot be referenced from a static cont Java Basics - Anfänger-Themen 5
H Problem mit einem Programmversuch (geteilter Thread) Java Basics - Anfänger-Themen 3
N Thread Problem. Java Basics - Anfänger-Themen 6
E Anfänger Problem mit Thread.sleep() Java Basics - Anfänger-Themen 11
D Thread und JOptionPane -> Problem Java Basics - Anfänger-Themen 6
D Thread Problem Java Basics - Anfänger-Themen 4
K Problem beim Einbau von einem Thread in eine Gui Java Basics - Anfänger-Themen 9
K animation in applet, thread problem (?) Java Basics - Anfänger-Themen 3
G Problem bei Thread im Frame Java Basics - Anfänger-Themen 3
G Problem mit Thread Java Basics - Anfänger-Themen 2
G Thread-Problem Java Basics - Anfänger-Themen 2
Leyla Thread isInterrupt Java Basics - Anfänger-Themen 18
P Meldung aus Java-Klasse in Thread an aufrufende Klasse Java Basics - Anfänger-Themen 1
A Thread XML-Dateien zusammenfügen Java Basics - Anfänger-Themen 11
F influxdb Upload in eigenem Thread Java Basics - Anfänger-Themen 2
frager2345 Thread - Methoden synchronized deklarieren Java Basics - Anfänger-Themen 10
berserkerdq2 Größter unterschied von extends thread und implements runnable? Java Basics - Anfänger-Themen 2
T Thread beenden aus zweiter Klasse Java Basics - Anfänger-Themen 4
A Thread - Synchronized Java Basics - Anfänger-Themen 10
A Thread Producer - Consumer Java Basics - Anfänger-Themen 1
A Thread-Semhapore Java Basics - Anfänger-Themen 0
A Thread Exchanger Java Basics - Anfänger-Themen 22
A Thread-Cyclicbarrier Java Basics - Anfänger-Themen 4
B In einem Thread Endlosschleife beenden Java Basics - Anfänger-Themen 19
A Thread-Verklemmung Java Basics - Anfänger-Themen 10
A Thread find number Java Basics - Anfänger-Themen 8
F Thread.sleep() Java Basics - Anfänger-Themen 5
F Exception in thread "main" java.lang.ArrayIndexOutOfBoundsException: 11 at main.main(main.java:11) Java Basics - Anfänger-Themen 2
A Thread Java Basics - Anfänger-Themen 3
M Exception in thread "main" java.util.NoSuchElementException Java Basics - Anfänger-Themen 2
A Thread Java Basics - Anfänger-Themen 8
B Compiler-Fehler Fehlermeldung Exception in thread, falsche Eingabewert Java Basics - Anfänger-Themen 2
M Thread-Zustände Java Basics - Anfänger-Themen 6
CptK For-Schleife in Thread nach jedem Durchlauf pausieren Java Basics - Anfänger-Themen 35
S Kriege Fehler "Exception in thread" beim Benutzen von SubStrings. Java Basics - Anfänger-Themen 2
B Endlosschleife Thread sauber beenden Java Basics - Anfänger-Themen 19
D Java Thread wartet nur ein mal Java Basics - Anfänger-Themen 1
D Java Thread wartet nur ein mal Java Basics - Anfänger-Themen 0
O Exception in thread "main" java.lang.ArithmeticException: / by zero Java Basics - Anfänger-Themen 4
C Thread und TimerTask, Verstädnisproblem Java Basics - Anfänger-Themen 10
amgadalghabra Sorting Thread Launcher Java Basics - Anfänger-Themen 3
B Exception in thread "AWT-EventQueue-0" java.util.ConcurrentModificationException Java Basics - Anfänger-Themen 8
A Thread Java Basics - Anfänger-Themen 4
A Thread Java Basics - Anfänger-Themen 1
A Thread Java Basics - Anfänger-Themen 0
R Exception in thread "main" java.lang.ArrayIndexOutOfBoundsException Java Basics - Anfänger-Themen 5
L Liste in anderem Thread laden Java Basics - Anfänger-Themen 1
B Thread / Prozess stoppen? Java Basics - Anfänger-Themen 22
I Compiler-Fehler Exception in thread "main" java.lang.ArrayIndexOutOfBoundsException: 5 Java Basics - Anfänger-Themen 3
B Threads Thread sleep() Method einfache Frage Java Basics - Anfänger-Themen 8
W Thread Aufgabe - Vorgehensweise Java Basics - Anfänger-Themen 8
L Liste in anderem Thread laden Java Basics - Anfänger-Themen 0
J Threads PrograssBar update während thread Java Basics - Anfänger-Themen 13
D Compiler-Fehler Wert auf Datenbank übertragen und Sleep Thread Java Basics - Anfänger-Themen 3
Spencer Reid JavaFX Memory Thread.sleep Java Basics - Anfänger-Themen 1
S Thread.sleep mit JProgressBar Java Basics - Anfänger-Themen 1
ralfb1105 Frage zu Thread Synchronisation mit wait() und notify() Java Basics - Anfänger-Themen 3
R Exception in thread "main" java.lang.NullPointerException Java Basics - Anfänger-Themen 10
J JavaFX -> SocketIO -> Thread -> Update Label Java Basics - Anfänger-Themen 13
J Thread Handling Java Basics - Anfänger-Themen 9
C Thread in Methode + raus aus der Schleife Java Basics - Anfänger-Themen 10
E Threads Thread in While-Schleife nur einmal starten Java Basics - Anfänger-Themen 2
F Daten von Thread an den aufrufenden zurückgeben Java Basics - Anfänger-Themen 22
C Compiler-Fehler Exception in thread "main" java.lang.ArrayIndexOutOfBoundsException: 2 Java Basics - Anfänger-Themen 3
N KeyListener in Thread Java Basics - Anfänger-Themen 0
M Thread.sleep() Funktion Java Basics - Anfänger-Themen 1
W JLabel in Main aus Thread verändern. Java Basics - Anfänger-Themen 4
D Ausgeben welcher Thread gerade Arbeitet Java Basics - Anfänger-Themen 8
N Threads Thread-Fehler Java Basics - Anfänger-Themen 2
F Thread um Uhrzeit ausführen Java Basics - Anfänger-Themen 5
F Get/Post als eigener Thread mit Rückgabe Java Basics - Anfänger-Themen 5
J Exception in thread "main" Java Basics - Anfänger-Themen 1
F Thread der auf eine Queue wartet, sicher beenden Java Basics - Anfänger-Themen 4
B Animation mit Thread(s) Java Basics - Anfänger-Themen 23
I Thread.sleep (1000); Java Basics - Anfänger-Themen 1
M Threads Jede Klasse einem Thread zuweisen Java Basics - Anfänger-Themen 7
J Java Thread cancel() und wiederbeleben Java Basics - Anfänger-Themen 4
J BouncingBalls 1 Thread Java Basics - Anfänger-Themen 3
L Fehler: Exception in thread "main" java.lang.ArrayIndexOutOfBoundsException Java Basics - Anfänger-Themen 4

Ähnliche Java Themen

Neue Themen


Oben