Angenommen ich habe folgenden Code:
Ist es damit sichergestellt, dass innerhalb von doSomething() die Liste im exklusiven Zugriff ist, selbst zwischenzeitlich ein anderer Thread doSomethingOther() aufruft? Mir geht es halt darum, dass ich nicht überall einen synchronized-Block benötige, daher wäre das in doSomethingOther() nutzlos. Nur innerhalb von doSomething wird halt relativ viel gemacht, wobei sichergestellt sein soll, dass sich die Liste in dieser Zeit nicht ändert.
Ist das mit diesem Konstrukt gegeben oder nicht? Komme mir zwar etwas blöd vor mit der Frage, aber ich bin mir da wirklich nicht ganz sicher, ob der Zugriff auf die Liste auch in doSomethingOther() blockiert wird, wenn jemand gerade doSomething() aufruft.
Code:
public class T{
private List<String> list;
public void doSomething(){
synchronized(list){
//stelle irgendwas mit der Liste an
}
}
public void doSomethingOther(){
//stelle hier auch etwas mit der Liste an
}
}
Ist es damit sichergestellt, dass innerhalb von doSomething() die Liste im exklusiven Zugriff ist, selbst zwischenzeitlich ein anderer Thread doSomethingOther() aufruft? Mir geht es halt darum, dass ich nicht überall einen synchronized-Block benötige, daher wäre das in doSomethingOther() nutzlos. Nur innerhalb von doSomething wird halt relativ viel gemacht, wobei sichergestellt sein soll, dass sich die Liste in dieser Zeit nicht ändert.
Ist das mit diesem Konstrukt gegeben oder nicht? Komme mir zwar etwas blöd vor mit der Frage, aber ich bin mir da wirklich nicht ganz sicher, ob der Zugriff auf die Liste auch in doSomethingOther() blockiert wird, wenn jemand gerade doSomething() aufruft.