Wenn doSomething2()
nur von doSomething1()
aufgerufen wird, wird es nur von einem einzelnen Thread für eine einzelne Instanz von MyClass
aufgerufen. Es kann immer noch von verschiedenen Threads gleichzeitig über verschiedene Instanzen aufgerufen werden. Wenn es also auf freigegebene Daten wirkt, die nicht spezifisch für die Instanz von MyClass
sind, ist es dennoch nicht garantiert, alle Threading-Probleme zu beheben.
Im Grunde genommen müssen Sie sorgfältig über jeden veränderbaren gemeinsamen Zustand nachdenken, der von mehreren Threads verwendet wird - es gibt keine einfachen Fixes, wenn Sie einen veränderbaren gemeinsamen Status benötigen. In Ihrem speziellen Fall müssten Sie auch sicher machen, dass doSomething2()
nur von doSomething1()
aufgerufen wurde - was bedeuten würde, dass es privat ist, mit ... zu beginnen.
Beim Aufruf von doSomething1()
blockiert der Aufrufende Thread
Sperren auf dem Monitor der Instanz von% Code%. Bis die Ausführung dieses Threads MyClass
beendet hat, bleibt die Sperre bestehen, was beinhaltet, wenn sie in doSomething1
geht. Dies führt dazu, dass andere Threads beim Sperren blockieren.
Beachten Sie:
doSomething2
threadsicher macht es nicht.
Weitere Informationen:
Wenn doSomething2()
NUR von doSomething1()
aufgerufen wird, dann ja - es ist threadsicher.
Tags und Links java thread-safety methods