Auf Liste mit 2 Threads abwechseln zugreifen

Status
Nicht offen für weitere Antworten.

hawkeye78

Bekanntes Mitglied
Hallo,

ich stehe gerade vor dem Problem das ich eine lineare Liste gebaut habe auf die ich mit 2 Thread zugreifen möchte (einer der schreibt und einer der Liest). Hierbei darf jeweils der eine nur dann auf die Liste zugreifen wenn der andere gerade schläft. Ich habe dafür in der Klasse in der die Liste ist eine boolean Variable angegeben die als Schalter fungiert und jeweils True ist wenn einer der beiden Threads drauf zugreift.
Im Moment greift allerdings nur der eine der beiden Threads drauf zu der auf die Liste schreibt.
Da ich im moment ziemlich ratlos bin woran es noch liegen könnte, wäre ich über einen entsprechenden Hinweis was ich falsch mache sehr dankbar.
Viele Grüsse
Dan
 
Ohne Code ist das nicht so leicht.
Ich gebe trotzdem mal einen Tip ab: Du setzt den Schalter nicht wieder auf false.
 
Wie Sebib90 schon geschrieben hat kannst du einen Vector nutzen.

Falls du allerdings eine eigene Klasse implementieren willt/mußt, wird
hawkeye78 hat gesagt.:
eine boolean Variable angegeben die als Schalter fungiert
prinzipiell nicht funktionieren, auch wenn du im Moment vielleicht noch einen anderen Fehler hast.

Das Problem ist, daß bei beinahe gleichzeitigem Zugriff auf eine Methode, der erste Thread
abfrage ob dein Schalter erlaubt einzutreten, bevor er aber dann die Anweisung ausführt
daß andere Threads warten müssen, kann sich Thread 2 reinquetschen und denkt anhand
des noch nicht geänderten Schalters, er dürfe auch weitermachen.

Da dies ein grundsätzliches Problem ist, hat Java in seiner Sprachdefinition bereits
den Modifier synchronized dafür vorgesehen.
Durch
Code:
public synchronized void insert(int hansi) {...}
wird dir alles abgenommen. Auch der Thread der warten muß tut dies automatisch.

Mehr zum Thema in einem Java-Buch deiner Wahl 🙂
 
Wurde im Chat gelöst!

War ein Fehler in der while Schleife, zuerst ging sie nur aufs 1 Element und dann nur bis zum vorletzten!
 
Status
Nicht offen für weitere Antworten.

Neue Themen


Zurück
Oben