tutorials.de Buch-Aktion 05/2012
Seite 2 von 2 ErsteErste 12
ERLEDIGT
JA
ANTWORTEN
17
ZUGRIFFE
586
EMPFEHLEN
  • An Twitter übertragen
  • An Facebook übertragen
AUF DIESES THEMA
ANTWORTEN
  1. #16
    Cymatoxa Cymatoxa ist offline Mitglied Silber
    Registriert seit
    Jul 2010
    Beiträge
    67
    Zitat Zitat von deepthroat Beitrag anzeigen
    Du müßtest volatile verwenden:
    Code java:
    1
    
    static volatile boolean condition = true;
    Gruß
    Sehr cool. So etwas in der Art hatte ich auch im Kopf, bin aber nicht darauf gekommen. Danke!

    Zitat Zitat von sheel Beitrag anzeigen
    das Hauptproblem an deinem boolean ist aber die fehlende Threadsicherheit.
    Du machst die Swing-Unzulänglichkeit kein Stück besser,
    wenn du ein genau so problematisches bool noch dazu machst.
    synchronized-Zugriff wäre schon eher was.
    Okay, dass AWT nicht threadsicher ist, weiß ich, aber bei Swing bin ich bisher vom Gegenteil ausgegangen. Aber wie kann ein boolean nicht threadsicher sein? Das ist doch nur ein einziges Bit. Und in meinem Programm hat nur ein Thread einen schreibenden Zurgiff darauf...

    Grüße,
    Cymatoxa

    EDIT:
    Wie kommt es eigendlich, dass das Programm auf manchen PCs auch ohne volatile funktioniert? Liegt das am Prozessor? Java sollte doch eigendlich auf allen Geräten gleich arbeiten.
    Geändert von Cymatoxa (09.01.12 um 19:56 Uhr)
     

  2. #17
    Avatar von sheel
    sheel sheel ist offline Moderator
    tutorials.de Moderator
    Registriert seit
    Jul 2007
    Beiträge
    4.503
    Swing: Die GUI-Frameworks sind da irgendwie alle gleich.
    Ob C/C++, Java, C# ... AWT, Swing oder sonst irgendwas, immer das selbe "Problem".

    bool /sicher: Das mit dem einen Bit ist ja alles gut und schön (auch wenn es in den seltensten Fällen wirklich nur ein Bit ist), aber: Da folgt dann wieder die Compileroptimierung usw. darauf.
    Alles zusammen ist die ganze Atomic-Sicherheit wieder weg.

    Wenn es manchmal ohne funktioniert: Ja, unter Anderem der Prozessor.
    Dazu Betriebssystem(evt. auch diese Windowspseudo-HAL), etc...

    Wie du sagst, Java soll immer gleich funktionieren.
    Nur soll. Mit Java plattformabhängige Programme schreiben ist leider sehr leicht.
    Cymatoxa bedankt sich. 
    Netiquette (vA §15) und Nutzungsregeln (vA §4.8) einhalten! Programmcode in Codetags/Codeboxen.
    Sehr gute Beiträge bitte Bewerten (Stern darunter oder "Danke").
    "Funktioniert nicht" ist zu ungenau! Code, Fehlermeldungen, Verhalten des Programms, ...?

  3. #18
    deepthroat deepthroat ist offline Mitglied Diamant
    tutorials.de Premium-User
    Registriert seit
    Jun 2005
    Beiträge
    8.168
    Zitat Zitat von Cymatoxa Beitrag anzeigen
    Okay, dass AWT nicht threadsicher ist, weiß ich, aber bei Swing bin ich bisher vom Gegenteil ausgegangen.
    A note on thread safety:
    It may seem strange that such an important part of the Java platform is not thread safe. It turns out that any attempt to create a thread-safe GUI library faces some fundamental problems. For more on this issue, see the following entry in Graham Hamilton's blog: MultiThreaded toolkits: A failed dream?
    Zitat Zitat von Cymatoxa Beitrag anzeigen
    Aber wie kann ein boolean nicht threadsicher sein? Das ist doch nur ein einziges Bit.
    Das hat mit threadsicher nichts zu tun. Ein Stück Code kann threadsicher sein oder nicht, aber kein Datentyp. Der Datentyp Zugriff kann höchstens atomar erfolgen oder auch nicht...
    Zitat Zitat von Cymatoxa Beitrag anzeigen
    Und in meinem Programm hat nur ein Thread einen schreibenden Zurgiff darauf...
    Deswegen gibt es in deinem Code auch kein Problem mit der Variablen und dem Zugriff darauf an sich.
    Zitat Zitat von Cymatoxa Beitrag anzeigen
    Wie kommt es eigendlich, dass das Programm auf manchen PCs auch ohne volatile funktioniert? Liegt das am Prozessor?
    Ja, z.B. Prozessor. Auf einem Single-Core Prozessor System hat der Prozessor die einzige Kopie einer Variablen, auf einem Multiple-Core / Multi-Prozessor System hat u.U. jeder Prozessor eine Kopie der Variablen. Deswegen muss man den Prozessor mit bestimmten Anweisungen zwingen immer auf die Speicherinformation direkt und nicht auf den (gecachten) lokalen Wert zuzugreifen, damit der Wert immer aktuell gehalten wird.
    Zitat Zitat von Cymatoxa Beitrag anzeigen
    Java sollte doch eigendlich auf allen Geräten gleich arbeiten.
    Es gibt auch in der Java Spezifikation "kann" und "darf" Bestimmungen. Ein Compiler bzw. der Bytecode-Interpreter oder JIT-Compiler kann, bzw. darf bestimmte Dinge (z.B. zur Optimierung) tun, welche letztendlich unter best. Umständen (bei unsauberer Programmierung) zu anderem Verhalten führen.

    Er darf z.B. den Wert einer non-volatile Variablen cachen und muss ihn nicht immer aus dem Speicher laden.

    Gruß
    Cymatoxa bedankt sich. 
    If at first you don't succeed, try again. Then quit. No use being a damn fool about it.

Ähnliche Themen

  1. Antworten: 2
    Letzter Beitrag: 24.08.10, 20:46
  2. blöder Fehler im Script oder denkfehler von mir?
    Von ts230 im Forum Javascript & Ajax
    Antworten: 4
    Letzter Beitrag: 13.05.08, 09:03
  3. SUM() funktioniert nicht.. oder doch Denkfehler?
    Von Immi im Forum Relationale Datenbanksysteme
    Antworten: 4
    Letzter Beitrag: 11.02.08, 13:39
  4. Denkfehler oder IE Bug?
    Von tobee im Forum Javascript & Ajax
    Antworten: 9
    Letzter Beitrag: 06.07.06, 16:24
  5. denkfehler?
    Von Firefighter 1966 im Forum C/C++
    Antworten: 4
    Letzter Beitrag: 22.12.04, 19:30