Java Threads

mGa

Mitglied
Hallo Leute,

für eine Facharbeit im Bereich Informatik habe ich mir das Thema "Java Threads" ausgesucht und dazu habe ich mir auch schon ein anschauliches Beispiel überlegt. So will ich zunächst einen Feuermelder realsieren. Meine Überlegung war, dass ich ein Thread habe, der ständig prüft, welchen Status der Feuermelder hat (z.b. Feuer oder kein Feuer). Ein weiterer Thread soll die Steuerung des Feuermelders übernehmen, der z.B. den Status festsetzt. Sobald also der Status auf Feuer gesetzt wird, soll der ÜberprüferThread wissen, dass es brennt, da er ja ständig den Status überprüft ... (siehe Bild)

Mein Problem liegt darin, wie kann ich es machen, dass der PrüferThread über die Änderung des Statues Bescheid weiß?

Vielen Dank im Voraus!
 

Anhänge

  • Feuermelder.png
    Feuermelder.png
    11,4 KB · Aufrufe: 68

F.S.WhiTeY

Bekanntes Mitglied
Deine überlegungen und dein Vorhaben gefallen mir ^^

Nun das machst du indem du mit Notify arbeitest. Musst du mal nen bissel googlen. Der eine Thread wird auf Wait gesetzt und wartet solang bis er vom überwachenden Thread das "wakeup" signal bekommt. Das macht man am besten mit Notify.

Du könntest z.B. mit dem Überwachertherad eine Ressource sperren und dann freigeben wenn Feuer ist. Dann kann der Alarm losgehen.

threads:

Java ist auch eine Insel – 9 Threads und nebenläufige Programmierung


Expliziet für wait und notify :
Java ist auch eine Insel – 9.6 Synchronisation über Warten und Benachrichtigen
 

Marco13

Top Contributor
Meine Überlegung war, dass ich ein Thread habe, der ständig prüft, welchen Status der Feuermelder hat...
Es wäre zwar ein schönes Beispiel, wo man sieht, wie sehr man verzweifeln kann, wenn man nicht an der richtigen Stelle ein 'volatile' einfügt, aber ansonsten ist alles, was dem Muster
Code:
while (!someCondition()) { /* do nothing */ }
folgt etwas, was man "busy waiting" nennt, und was man nur in Ausnahmefällen rechtfertigen kann, wenn die Bedingung nicht anders überwachbar ist und man statt "nothing" zumindest ein angemessenes Thread.sleep(x) macht.

Ich finde, für Threads könnte was "Producer-Consumer"-Mäßiges interessant sein, oder irgendwas, wo mehrere Threads irgendwelche Aufwändigen Berechnungen durchführen.

EDIT: BTW: Das mit dem wait+notify war schon der richtige Tipp - DAS ist dann nämlich etwas, was im oben angedeuteten Sinne "überwachbar" ist. Wo dann aber der Nutzen der Threads ist, könnte schwer zu vermitteln sein.
 

XHelp

Top Contributor
Code:
while (!someCondition()) { /* do nothing */ }
...
Wo dann aber der Nutzen der Threads ist, könnte schwer zu vermitteln sein.

Man könnte es so gestalten:
Code:
while (!someCondition()) { /* do nothing */ }
mainProgram.someCallBackMethod();
Dann könnte man ggf. eine Anknüpfung an Sinn der Threads machen.
 

André Uhres

Top Contributor
Hallo mGa,

herzlich willkommen in unserem Java Forum.

Wir können im Feuermelder einfach eine BlockingQueue (seit Java 5) für die Meldungen anlegen. Dort können wir dann mit add(..) neue Meldungen ablegen und mit take() jeweils eine Meldung zur Verarbeitung abholen. Die Methode take() wartet, wenn nötig, bis eine Meldung verfügbar ist.

Gruß,
André
 

ARadauer

Top Contributor
Mein Problem liegt darin, wie kann ich es machen, dass der PrüferThread über die Änderung des Statues Bescheid weiß?
der Prüfer muss eine Referenz auf das zu prüfende haben und alle x ms nachsehen... und dann die anderen informieren...
 

ARadauer

Top Contributor
Hallo ARadauer,

dein Vorschlag entspricht einem aktiven Warten. Für die Synchronisation in Java wird generell davon abgeraten ;).

Gruß,
André

ok verstehe... mach eigentich wenig mit threading... das cuncurency buch mit den zügen vorne drauf würde mir wahrscheinlich nicht schaden..

Dort können wir dann mit add(..) neue Meldungen ablegen und mit take() jeweils eine Meldung zur Verarbeitung abholen.
im Grunde würde dann das Fuer eine Meldung an den Feuermelder schicken. Was ist aber wenn ich den Code der Zustand hält nichit verändern kann... mhn zb ein Satz in der DB oder ein File.. starte etwas wenn aufeinmal File X verhanden ist?
 

Marco13

Top Contributor
Das wäre dann einer der Fälle, auf die sich das hier zum "busy waiting" bezog:

... was man nur in Ausnahmefällen rechtfertigen kann, wenn die Bedingung nicht anders überwachbar ist und man statt "nothing" zumindest ein angemessenes Thread.sleep(x) macht.


@Andre: Ich finde die Sache mit der BlockingQueue auch praktisch. Die bringt genau diese gewünschte Funktionalität, und man kann sie SEHR einfach anwenden, und fast nichts falsch machen. Eigentlich sollte diese Queue dann eine Maximalgröße von 1 haben, und eigentlich wäre diese Queue dann nur eine (sehr komplexe und aufwändige) "Verpackung" von einem Lock mit einer Condition. Aber die Einfachheit, Übersichtlichkeit (ohne try/finally und so) und Fehlerresistenz rechtfertigt das dann IMHO.
 

mGa

Mitglied
Ich habe mir nun ein Beispiel ausgesucht, in dem vier Verschiedene Threads eine ArrayList füllen. Jeder Thread fragt, die Datenbank ab ob noch freie Plätze im ArrayList sind und falls dies war ist, funktioniert die Schleife und ruft die Methode zum hinzufügen auf. Diese Methode ist synchronized. Hier nun mein Problem: Ich habe z.B. eine grenze von 20 gewählt und wenn nur ein Thread die Liste füllt, dann werden auch nur 20 Einträge eingetragen, wenn ich nun aber zwei weitere Thread dazuschalte sinds am Ende immer 22 Einträge die in der ArrayList stehen ... Ich habe versuch den Zaehler in der Datenbankklasse auf "volatile" zu setzen, aber irgendwie bleibt der gewünschte Effekt aus, ebenso ist die Abfrage Methode nach freien Plätzen synchronized ... Wo mache ich einen Fehler? Vielen Dank im voraus!
 

mGa

Mitglied
Hier ist der Code vom Thread und von der Datenbank:

Thread:
Java:
public void run() {
        while(this.Datenbank.freieSlots()) {
            try {                
                this.sleep(100);
            } catch(InterruptedException e) { }

            this.Datenbank.neuerBesucherHinzuegen(...);
        }
}

Datenbank:
Java:
class Datenbank {
    private ArrayList...;
    private int AktuelleAnzahl;
    private int MaxAnzahl;

    public synchronized void neuerBesucher(...) {
        this.AktuelleAnzahl++;
        Besucher NeuerBesucher = new ...;
        this.[...].add(NeuerBesucher);                 
    }

    public synchronized boolean freieSlots() {
        return ((this.MaxAnzahl - this.AktuelleAnzahl) > 0);
    }

Danke schonmal!
 

ARadauer

Top Contributor
Variablen schreibt man klein...

Java:
       while(this.Datenbank.freieSlots()) {
            try {                
                this.sleep(100);
            } catch(InterruptedException e) { }
 
            this.Datenbank.neuerBesucherHinzuegen(...);
        }

mhn naja es geht ja bei synchronized nur drum, dass nicht zwei threads gleichzeitig den MEthode betretten.

Ist was frei... ja.. dann warte ich mal 100 ms, dann füg ich ein..... mhn sagt aber keiner das in den 100 ms nicht andere auf die selbe idee gekommen sind und was eingefügt haben...
 

F.S.WhiTeY

Bekanntes Mitglied
ARadauer hat recht. Ich weiß nicht ob sich das über nen Thread-Pool besser machen liese aber man kann einen Thread-Pool Runterfahren ( shutdown(); ) und dann werden keine neuen anfragen mehr angenommen.

Laufende Threads werden allerdings nicht beendet, also bin ich mir nocht sicher dass dieses Problem damit gelößt wäre.

Auf jedenfall könnte man von Außen mit stop(); alle anderen laufenden Threads beenden wenn die grenze erreicht ist.
 

mGa

Mitglied
Ok, ich habs jetzt gelörst, in dem ich in die Methode "this.Datenbank.neuerBesucherHinzuegen()" einfach nochmals eine Abfrage über die freienSlots eingebaut habe, und dann gehts ...
 
Ähnliche Java Themen
  Titel Forum Antworten Datum
H Nutzt Eclipse alle CPU-Threads beim Ausführen von Java-Programmen? Java Basics - Anfänger-Themen 4
berserkerdq2 Wo finde ich in der Java Api die Notation zu Threads bezüglich Synchronized? Java Basics - Anfänger-Themen 14
berserkerdq2 Findet eine parallele Verarbeitung in Java bei Threads erst statt, wenn man die Methoden auch synchronized? Und wie sieht bei Conditions aus? Java Basics - Anfänger-Themen 8
J ConcurrentCalculation Multi Threads in Java Java Basics - Anfänger-Themen 3
T Java-Threads Java Basics - Anfänger-Themen 0
F Java Concurrency - Threads Java Basics - Anfänger-Themen 4
T Java Threads Java Basics - Anfänger-Themen 4
L cpu fressende Threads und quad-core mit java Java Basics - Anfänger-Themen 4
G Java Threads abwechselnd schlafen legen Java Basics - Anfänger-Themen 3
I Push Nachrichten von JAVA EE App an Mobile App Java Basics - Anfänger-Themen 3
H .java Dateien in Eclipse einbinden und ausführen Java Basics - Anfänger-Themen 1
onlyxlia Schlüsselworte Was meint man mit "einen Typ" in Java erstellen? Java Basics - Anfänger-Themen 2
O Java Kara geschweifte Klammern Java Basics - Anfänger-Themen 2
richis-fragen Mausrad logitech kann links und rechts klick wie in java abragen. Java Basics - Anfänger-Themen 15
XWing Java Klssenproblem Java Basics - Anfänger-Themen 4
R Umgebungsvariable java -cp gibt immer Java-Hilfe... Java Basics - Anfänger-Themen 3
farbenlos Csv Datei in Java einlesen Java Basics - Anfänger-Themen 18
F TableModelListener: java.lang.ArrayIndexOutOfBoundsException: 132 Java Basics - Anfänger-Themen 3
G Java 8 - Support-Ende Java Basics - Anfänger-Themen 7
T Java Weihnachtsbaum + Rahmen Java Basics - Anfänger-Themen 1
N Will mit Java anfangen Java Basics - Anfänger-Themen 13
Ü Java Array - Buchstaben als Zahlen ausgeben Java Basics - Anfänger-Themen 22
M Java Iterator Verständnisfrage Java Basics - Anfänger-Themen 6
M Java Mail Programm Java Basics - Anfänger-Themen 4
Sniper1000 Java 391 für Windows Java Basics - Anfänger-Themen 37
J Java long- in int-Variable umwandeln Java Basics - Anfänger-Themen 6
JaZuDemNo Java im Studium Java Basics - Anfänger-Themen 7
E Java Programm zur anzeige, ob Winter- oder Sommerzeit herrscht Java Basics - Anfänger-Themen 62
I QR code in Java selber generieren Java Basics - Anfänger-Themen 5
V Java-Ausnahmebehandlung: Behandlung geprüfter Ausnahmen Java Basics - Anfänger-Themen 1
krgewb Java Streams Java Basics - Anfänger-Themen 10
A Überwältigt von der komplexen Java Welt Java Basics - Anfänger-Themen 29
O Mehrfachvererbung auf Spezifikations- und Implementierungsebene in Java. Interfaces Java Basics - Anfänger-Themen 19
John_Sace Homogene Realisierung von Generics in Java ? Java Basics - Anfänger-Themen 19
P Meldung aus Java-Klasse in Thread an aufrufende Klasse Java Basics - Anfänger-Themen 1
R mit Java API arbeiten Java Basics - Anfänger-Themen 9
P JDK installieren Probleme bei der Java-Installation Java Basics - Anfänger-Themen 8
S Java: Wie sortiere ich eine ArrayList benutzerdefinierter Objekte nach einem bestimmten Attribut? Java Basics - Anfänger-Themen 2
Timo12345 JNLP File mit Java öffnen Java Basics - Anfänger-Themen 2
S Video Editierung mit Java.._ Java Basics - Anfänger-Themen 2
F Einstelungen in Java - CursorBlinkRate Java Basics - Anfänger-Themen 10
A PHP $_POST["name"] in Java Java Basics - Anfänger-Themen 3
vivansai21 Is there a oneliner to create a SortedSet filled with one or multiple elements in Java? Java Basics - Anfänger-Themen 9
Athro-Hiro Weißes Bild in Java erstellen Java Basics - Anfänger-Themen 3
Arjunreddy Can someone please tell me how to use a debugger in BlueJ(a Java environment) Java Basics - Anfänger-Themen 1
M Java assoziationen (UML) Java Basics - Anfänger-Themen 8
H Excel-Tabellen mit Java erstellen Java Basics - Anfänger-Themen 4
Simon16 Java ArrayListe von einer Klasse sortieren Java Basics - Anfänger-Themen 2
P Wie kann ich in meinem Java Programm etwas dauerhaft speichern? Java Basics - Anfänger-Themen 5
xXGrowGuruXx Java einstieg, leichte sache 0 verstanden Java Basics - Anfänger-Themen 7
A java.sql.SQLException: Data type mismatch. Java Basics - Anfänger-Themen 1
H Java-Programm zur Ausgabe von Zuständen Java Basics - Anfänger-Themen 80
N Java Spiel Figur auf dem Hintergrundbild bewegen. Java Basics - Anfänger-Themen 11
G Kann Java-Programm nicht als jar aufrufen, auch als EXE nicht Java Basics - Anfänger-Themen 19
N Java Taschenrechner hat Jemand vlt einen Tipp dafür wie ich jetzt die buttons verbinden kann und das Ergebnis auf dem textfield anzeigen lassen kann Java Basics - Anfänger-Themen 13
A Lerngruppe Java Java Basics - Anfänger-Themen 2
G Help me in the Java Program Java Basics - Anfänger-Themen 2
L Java- Vererbung Java Basics - Anfänger-Themen 4
LimDul Suche Java Stream Tutorial Java Basics - Anfänger-Themen 2
_so_far_away_ Ich möchte Java lernen Java Basics - Anfänger-Themen 11
benny1993 Java Programm erstellen für ein Fußball-Turnier Java Basics - Anfänger-Themen 3
M Datentypen While-Schleife eine Java Methode erstellen Java Basics - Anfänger-Themen 3
V Bild per Java Script austauschen Java Basics - Anfänger-Themen 7
MoxMorris this Keyword in Java Java Basics - Anfänger-Themen 14
D Wie kann man in Java nach Arrays auf Duplikate prüfen Java Basics - Anfänger-Themen 12
wolei JAVA Zeitdifferenz feststellen. Java Basics - Anfänger-Themen 4
DiyarcanZeren Rekursion in Java Java Basics - Anfänger-Themen 5
wolei Java generic interface in a generic class Java Basics - Anfänger-Themen 6
monsterherz Ablauf der Erstellung eines Java Programmes Java Basics - Anfänger-Themen 17
monsterherz Circle.java:5: error: <identifier> expected Java Basics - Anfänger-Themen 2
julian-fr Wie kann ich am besten Java lernen? Java Basics - Anfänger-Themen 17
A Java-Properties und -RessourceBundles Java Basics - Anfänger-Themen 5
lrnz22 Java-Basics-Aufgabe Java Basics - Anfänger-Themen 8
R Java kann nicht installiert werden Java Basics - Anfänger-Themen 8
marcelnedza Finde meinen Fehler in einer Methode nicht, Java Karol Java Basics - Anfänger-Themen 15
G In ein java Dokument Ton einbinden Java Basics - Anfänger-Themen 1
C was heisst es wenn java ']' erwartet ? Java Basics - Anfänger-Themen 2
KeinJavaFreak Erste Schritte Programm "Java(TM) Platform SE binary " nicht vorhanden Java Basics - Anfänger-Themen 1
KeinJavaFreak Erste Schritte Java "Executable Jar File" nicht vorhanden Java Basics - Anfänger-Themen 1
melisax Java 2D-Array Tabelle Java Basics - Anfänger-Themen 4
melisax Java Array Wert an bestimmtem Index angeben Java Basics - Anfänger-Themen 14
J Java Testklasse Java Basics - Anfänger-Themen 5
P Java Selenium . Parameterized.Parameters erzeugt eine Fehlermeldung Java Basics - Anfänger-Themen 14
W Java-Code mit Array Java Basics - Anfänger-Themen 14
W Java-Code Java Basics - Anfänger-Themen 2
P BeforeEach AfterEach werden nicht ausgeführt. Java / Selenium Java Basics - Anfänger-Themen 4
A Wie führe ich eine Batch-Datei von meiner Java-Anwendung aus? Java Basics - Anfänger-Themen 18
W Java code- TicTac toe Java Basics - Anfänger-Themen 51
Ostkreuz Java Docs Java Basics - Anfänger-Themen 9
R Java boolean Unterschied " == " und " = " Java Basics - Anfänger-Themen 3
D Java Programm mit Batch-Datei starten Java Basics - Anfänger-Themen 32
W Java-code Java Basics - Anfänger-Themen 8
W Java-code Java Basics - Anfänger-Themen 9
W Java-Code erklären Java Basics - Anfänger-Themen 6
A Java Kurs / Tutorial Java Basics - Anfänger-Themen 6
K Java Lotto Spiel; ich komme nicht weiter Java Basics - Anfänger-Themen 15
R Operatoren Rechenoperation in Java verwenden für Calculator Java Basics - Anfänger-Themen 2
P Java 2n Potenzieren Java Basics - Anfänger-Themen 1
J Java Hamster Java Basics - Anfänger-Themen 4
D Wie sehe ich ein Java-Programm? Java Basics - Anfänger-Themen 27

Ähnliche Java Themen

Neue Themen


Oben