# Problem mit Threads



## javamacher (21. Apr 2012)

Ich habe ein problem mit threads und keine ahnung wieso...
Sie geben mir leider nicht das aus was ich erwarte....
Ich erwartete eigentlich eine Auflistung von Abzügen... bis das Letzte ergebnis manchmal im Bereich zwischen eins und zehn liegt und dass es auch selten mal vorkommt dass eine minuszahl vorhanden ist...
Würde mich über Hife sehr freuen, vielen Dank
so siehts aus :


```
public class Main implements Runnable {

	private static int Zahl = 100;

	public static void main(String[] args) {

		Runnable job1 = new Main();

		Runnable job2 = new Main();

		Thread eins = new Thread(job1);

		Thread zwei = new Thread(job2);

		System.out.println(Zahl);

		eins.start();

		zwei.start();

		System.out.println(Zahl);
	}

	@Override
	public void run() {

		for (int i = 0; i == 20; i++) {
			if (Zahl >= 10) {

				Zahl = Zahl - (int)(Math.random() * 10);
			}

			System.out.println(Zahl);
		}
	}

}
```


----------



## Fu3L (21. Apr 2012)

deswegen sollte man Threads nur benutzen, wenn man weiß, was man tut 

Galileo Computing :: Java ist auch eine Insel - 12 Einführung in die nebenläufige Programmierung

Insbesondere Kapitel 12.5 ist zu empfehlen


----------



## javamacher (21. Apr 2012)

...


----------



## XHelp (21. Apr 2012)

Hat nichts mit Threads zu tun, sondern mit Schleifen. Schau dir deine Bedingung noch mal genau an.


----------



## Fu3L (21. Apr 2012)

XHelp hat schon recht, dass es an der Schleife liegt (das hatte ich tatsächlich nicht gesehen.. Die Fehlerbeschreibung war ja auch eher mau).
Allerdings würde ich mir das verlinkte Kapitel aus der Insel schon zu Gemüte führen, weil Threadsafe ist das ganze nicht.


----------



## javamacher (21. Apr 2012)

Das ist es ja... ich will einen Fehler produzieren.

Doch leider sehe ich den Fehler nicht... Es wird mir keine Zeile Text durch die Schleife ausgegeben.

Und ja einen Fehler habe ich produziert nur leider nicht den gewünschten...

Und ich lese mir ja gerade auch was an, die Frage ist nur wie ich nun dieses Problem hier in Griff bekomme


----------



## Fu3L (21. Apr 2012)

```
for (int i = 0; i == 20; i++) {
```

So lange wie i genau gleich 20 ist, führe den Schleifenkörper aus.

PS: Habe erkannt, dass du dir der Threadunsicherheit doch bewusst bist (wegen der negativen Werte). Hatte das nur als Ursache erwartet, weil sonst die Fehlerbeschreibung hätte lauten können: "Keine Ausgabe" )


----------



## XHelp (21. Apr 2012)

```
for (int i = 0; i == 20; i++) {
```
 bedeutet soviel wie: am Anfang ist i gleich 0. Und die Schleife soll solange ausgeführt werden, solange i *gleich* 20 ist...
Du willst aber vermutlich die Schleife solange laufen lassen, solange i *kleiner als* 20 ist.


----------



## javamacher (21. Apr 2012)

exakt das wars vielen Dank dafür... trauriger Fehler


----------

