synchronized + threads

  • Themenstarter Themenstarter Guest
  • Beginndatum Beginndatum
Status
Nicht offen für weitere Antworten.
G

Guest

Gast
hi muss die aufgabe erledigen:

a) Schreiben Sie ein Programm, das 26 Threads kreiert, wobei jeder Thread einen Buchstaben
des Alphabets einzeln aber wiederholt ausgibt.3
b) Synchronisieren Sie das im ersten Teil erstellte Programm, so dass die Buchstaben einzeln in
der Reihenfolge des Alphabets wiederholt ausgegeben werden.

a hab ich denk ich schon gemacht :

Code:
import java.lang.Thread;

		class threads extends Thread {
		    String text;
		  
		    public threads(String text) {
		      this.text = text;
		    }
		  
		    public void run() {
		      for(int i = 0; i < 10; i++) {
		        try {
		          sleep((int)(Math.random()*1000));
		        }
		        catch(InterruptedException e) {
		        }
		       System.out.print(text);
		      }
		    }
		  }
		  
		  public class thread {
		  
		    public static void main(String args[]) {
		    	threads a, b, c, d, e, f, g, h, i, j, k, l, m, n, o, p, q, r, s, t, u, v, w, x, y, z;
		  
		    	a = new threads("a");
		    	b = new threads("b");
		    	c = new threads("c");
		    	d = new threads("d");
		    	e = new threads("e");
		    	f = new threads("f");
		    	g = new threads("g");
		    	h = new threads("h");
		    	i = new threads("i");
		    	j = new threads("j");
		    	k = new threads("k");
		    	l = new threads("l");
		    	m = new threads("m");
		    	n = new threads("n");
		    	o = new threads("o");
		    	p = new threads("p");
		    	q = new threads("q");
		    	r = new threads("r");
		    	s = new threads("s");
		    	t = new threads("t");
		    	u = new threads("u");
		    	v = new threads("v");
		    	w = new threads("w");
		    	x = new threads("x");
		    	y = new threads("y");
		    	z = new threads("z");
		    	
		    	a.start();
		    	b.start();
		    	c.start(); 
		    	d.start();
		    	e.start();
		    	f.start(); 
		    	g.start(); 
		    	h.start(); 
		    	i.start();
		    	j.start(); 
		    	k.start();
		    	l.start(); 
		    	m.start(); 
		    	n.start(); 
		    	o.start();
		    	p.start(); 
		    	q.start(); 
		    	r.start();
		    	s.start(); 
		    	t.start(); 
		    	u.start(); 
		    	v.start();
		    	w.start();
		    	x.start();
		    	y.start(); 
		    	z.start(); 

		    	
		    }
		  
		  }

aber ich hab leider keine ahnung wie ich das genau mit dem synchronisieren machen soll?! Ich kann ja nicht die einzelnen Threads ansprechen..
hat jemand ne lösung?
 
ja wie gesagt ich krieg das nicht hin, weil wenn ich den prozess synchronize und dann wieder freigebe dann versuchen 26 threads auf den zuzugreifen und ich brauch ne richtige reihenfolge die ich so nicht versichern kann..
 
es muss ja dann zuerst der thread wieder ausgeführt werden der a ausgibt dann der der b ausgibt etc. .. und ich kann ja nur notify machen (wobei ich dann nicht weiss welcher der threads dann dran ist) oder notifyAll was mein problem auch net löst..
 
also ich wär sehr dankbar wenn jemand mir hier bei dem problem helfen könnte und den code dazu schreiben könnte
 
brainiac.. war ja klar das sowas von nem typen mit so nem nick kommen muss. wenn ichs hinkriegen würde würde ich net nachfragen du intelligenzbolzen... *augenverdreh*
 
Gast hat gesagt.:
brainiac.. war ja klar das sowas von nem typen mit so nem nick kommen muss. wenn ichs hinkriegen würde würde ich net nachfragen du intelligenzbolzen... *augenverdreh*

Wann sollen wir denn machen? Die das fertige Programm abliefern? Du stellst keine konkrete Frage, oder postest Code mit Fehlermeldung. Alles Allgemeine dazu wurde schon gesagt.
 
Hmm, ist aber eigentlich eine interessante Aufgabenstellung. Um zu erreichen das die wirklich das ABC in korrekter Reihenfolge ausgeben müssten doch wohl jeder Thread eine Referenz auf seinen Nachfolger haben. Mit nem 'synchronized' wüsste ich da jetzt erstmal nicht viel anzufangen, die Threads greifen ja, ausser auf out, auf nix gemeinsames zu, und wenn man die Reihenfolge sichergestellt hat kann ja eigentlich bei der Ausgabe auch nix passieren.
 
Man könnte ja auch eine Facade implementieren auf die alle Thrteads zugreifen und die eben immer nur den nächsten Thread mit der korrekten Ausgabe durchlässt.
 
RaoulDuke's Ansatz ist schon genau richtig.

Allerdings würde ich den Vorgänger merken, nicht den Nachfolger.

z-->y-->x-->...-->a-->z

Mittels der Methode join(), wartet dieser dann auf eine Beendigung
seiner Vorgängers.
 
Hallo zusammen,

ich habe da mal eine generelle Frage, als mehr oder weniger Thread-Unerfahrener:
Wenn diese Threads sowieso in bestimmter Reihenfolge sequenziell arbeiten sollen, wofür benötige ich diese dann?
???:L
Vielleicht werde ich auch aus der Aufgabe mit dem Alphabet nicht schlau. Gibt's dafür vielleicht Bsp. aus der "reallen" Welt?
 
Das ist einfach eine Übungsaufgabe, zum synchronizieren von Threads. Benötigt wird das, wenn zwei Threads Aufgaben erledigen und der eine dabei auf Beendigung des anderen Warten muss, um weiterzuarbeiten.
 
Status
Nicht offen für weitere Antworten.

Neue Themen


Zurück
Oben