Schrift
[thread]1054[/thread]

Java: java + thread + synchronize

Leser: 1


<< >> 4 Einträge, 1 Seite
shaihulud
 2006-07-09 20:39
#10714 #10714
User since
2006-04-12
76 Artikel
BenutzerIn
[default_avatar]
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: (dl )
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
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.. Bitte keine "schau mal in google" oder "les dir das durch".. ich hab schon ne menge durchgelesen und weiss einfach nicht wie rangehn...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 ja 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..
hat jemand n lösungsvorschlag? codebeispiel oder lösung wäre sehr lieb :)\n\n

<!--EDIT|shaihulud|1152463934-->
renee
 2006-07-09 20:59
#10715 #10715
User since
2003-08-04
14371 Artikel
ModeratorIn
[Homepage] [default_avatar]
Das Synichronisieren könntest Du mit join erreichen (siehe http://www.dpunkt.de/java....16.html )...

Du solltest Dir mal überlegen, eine Schleife zu schreiben, die die ganzen Threads erzeugt und startet. Dann würdest Du Dir jede Menge Schreibarbeit sparen:

Code: (dl )
1
2
3
4
5
6
7
8
9
10
          public static void main(String args[]) {

int MAX = 26;

for(int i = 0; i < MAX; i++){
threads t = new threads((char)(i+65));
t.start();
t.join();
}
}
OTRS-Erweiterungen (http://feature-addons.de/)
Frankfurt Perlmongers (http://frankfurt.pm/)
--

Unterlagen OTRS-Workshop 2012: http://otrs.perl-services.de/workshop.html
Perl-Entwicklung: http://perl-services.de/
shaihulud
 2006-07-09 21:20
#10716 #10716
User since
2006-04-12
76 Artikel
BenutzerIn
[default_avatar]
join kanns eigentlich doch auch irgendwie nicht sein weil der join kommt ja erst wenn der thread abgeschlossen ist und das hieße ja dass der thread dann schon 10 mal a geschrieben hat und nicht nur einmal sodass dann b kommen kann?!\n\n

<!--EDIT|shaihulud|1152467643-->
renee
 2006-07-10 09:47
#10717 #10717
User since
2003-08-04
14371 Artikel
ModeratorIn
[Homepage] [default_avatar]
Vielleicht findest Du hier den richtigen Anstoß: http://de.wikibooks.org/wiki....isieren
OTRS-Erweiterungen (http://feature-addons.de/)
Frankfurt Perlmongers (http://frankfurt.pm/)
--

Unterlagen OTRS-Workshop 2012: http://otrs.perl-services.de/workshop.html
Perl-Entwicklung: http://perl-services.de/
<< >> 4 Einträge, 1 Seite



View all threads created 2006-07-09 20:39.