Variablen eines anderen Threads bearbeiten

  • Java

Es gibt 6 Antworten in diesem Thema. Der letzte Beitrag () ist von jvbsl.

    Variablen eines anderen Threads bearbeiten

    Hallöchen, ich hoffe das ist die richtige anlaufstelle(ist ja kein Java forum).

    Was soll passieren:
    Thread B soll auf statische Variable zugreifen, die von Thread A erstellt wurde.

    Wo liegt das Problem?
    Wenn ich das (simpel) mache,

    Quellcode

    1. werteVonA.wertXYZ = "backfisch"

    reißt es die ganze JVM in den tod und ich erhalt e die meldung das eine ACCES_VIOLANT_EXCEPTION (o. ä.) aufgetreten ist.

    Hat irgendjemand eine Idee wie ich das umsetztn könnte (Thread B wird von Thread A erzeugt und gestartet).

    Danke im vorraus,
    LuaX
    こんにちわ
    Achte beim stellen von Fragen auf eine genaue Fragestellung, mir passiert das selbst häufig, andere können dir dann nicht so gut helfen.
    Welche Java Version auf welchem Betriebssystem?
    Mir wäre nicht bekannt, dass dieser Fehler irgendetwas mit Threading direkt zu tun hat, sondern viel mehr mit Schreiben in ungültigem Memory-Bereich, bzw. Memory der nicht dem Prozess gehört, aber alle Threads laufen idR im selben Prozess und haben somit Zugriff auf alle Daten des Prozesses. In Java sollten solche Fehler sowieso nur durch Native Aufrufe erst möglich sein ähnliche Bugs sind aber immer wieder in der JVM aufgetreten welche dann aber meist wieder gefixt wurden.
    Könnte aber dennoch gut ein Bug sein(vorallem wenn du ein entsprechend älteres Java benutzt)
    Ich wollte auch mal ne total überflüssige Signatur:
    ---Leer---
    Danke '@jvbsl'
    Ich verwende die noch aktuelle Java 8_111 mit Windows. Ich habe mir die Fehlermeldubg nochmal angesehen.....hab aber nichts was mit Memory-Managemet zutun hätte gefunden.
    Ich poste Sobald wie möglich mal die Meldung ....die wäre vieleicht noch Hilfreich..

    Grüße
    こんにちわ
    Achte beim stellen von Fragen auf eine genaue Fragestellung, mir passiert das selbst häufig, andere können dir dann nicht so gut helfen.
    Vorweg ich kenn mich mit Java nicht wirklich aus. Aber ich würde die Variable wertXYZ als ReadOnly deklarieren und dem Objekt werteVonA eine Methode die mit synchronized modifizeirt ist. In dieser Methode änderst du dann die Varibale, damit sollte das ganze Threadsicher sein.
    Also wie bereits gesagt, sieht es mir nicht nach einem generellen Threading Problem aus und einfach synchronized drumherum hauen ist auch keine Lösung, das setzen von Variablen geht immer parallel, selbst bei Dingen, die nicht atomic sind, Probleme die dabei auftreten können sind i.d.R. eher, dass die Daten nachher nicht mehr sinnvoll sind, aber mehr auch nicht und durch das bloße schreiben kommt sowas nicht zustande, nur wenn zwei Threads gleichzeitig schreiben und selbst dann sollte man sich immer überlegen wo, wann und wie bzw. ob man synchronisiert.

    Vlt. könnte etwas mehr Code auch hilfreich sein um dem Problem auf die Spur zu kommen.
    Ich wollte auch mal ne total überflüssige Signatur:
    ---Leer---
    Hallöle,

    danke @jvbsl, Im nachhinein ist mir aufgefallen das die Java-Version "Java-6" war. Das war der auslöser, nun läuft's
    An @Fakiz: Ein

    Quellcode

    1. ReadOnly
    gibt es soviel ich weis nicht, man müsste dann halt eine

    Quellcode

    1. private
    mit einem

    Quellcode

    1. Getter
    benutzen.

    Danke an alle!
    こんにちわ
    Achte beim stellen von Fragen auf eine genaue Fragestellung, mir passiert das selbst häufig, andere können dir dann nicht so gut helfen.