Hi Leute!
Mal ne kurze Frage: Ist der Zugriff auf primitive Datentypen threadsafe oder muss ich das synchronisieren?
Genauer geht es eigentlich nur um eine boolean Variable. Die steht eben in dem einen Thread in der großen while Schleife:
while(!stop){
//do stuff
}
Wenn dieser Thread aufhören soll, setzt der andere Thread dann die Variable stop auf true und der andere Thread kann die Schleife dann verlassen und wird dann beendet. Jetzt könnte es ja sein, dass genau in dem Moment der eine Thread die Variable stop schreiben will, während der andere sie lesen will. Ist das automatisch synchronisiert oder kommt es da zu Konflikten ?
synchronized kann ich auf primitive Datentypen ja nicht anwenden.
Mir ist wohl klar, dass sowas wie i++; nicht synchronisiert ist, denn wenn mans ausschreibt zu i = i + 1; sieht man ja, dass i erst gelesen werden muss, dann wird 1 addiert und dann erst wird geschreiben. Wenn i jetzt zwischen dem Lesen und dem Schreiben nach der Addition in einem anderen Thread verändert wird, wird dann quasi etwas Falsches in i geschrieben. Aber das meine ich mit meiner Frage auch nicht.
Es kann nicht sein, dass genau im gleichen Moment ein primitiver Datentyp gelesen und geschrieben wird, oder ?
Mal ne kurze Frage: Ist der Zugriff auf primitive Datentypen threadsafe oder muss ich das synchronisieren?
Genauer geht es eigentlich nur um eine boolean Variable. Die steht eben in dem einen Thread in der großen while Schleife:
while(!stop){
//do stuff
}
Wenn dieser Thread aufhören soll, setzt der andere Thread dann die Variable stop auf true und der andere Thread kann die Schleife dann verlassen und wird dann beendet. Jetzt könnte es ja sein, dass genau in dem Moment der eine Thread die Variable stop schreiben will, während der andere sie lesen will. Ist das automatisch synchronisiert oder kommt es da zu Konflikten ?
synchronized kann ich auf primitive Datentypen ja nicht anwenden.
Mir ist wohl klar, dass sowas wie i++; nicht synchronisiert ist, denn wenn mans ausschreibt zu i = i + 1; sieht man ja, dass i erst gelesen werden muss, dann wird 1 addiert und dann erst wird geschreiben. Wenn i jetzt zwischen dem Lesen und dem Schreiben nach der Addition in einem anderen Thread verändert wird, wird dann quasi etwas Falsches in i geschrieben. Aber das meine ich mit meiner Frage auch nicht.
Es kann nicht sein, dass genau im gleichen Moment ein primitiver Datentyp gelesen und geschrieben wird, oder ?