2017-02-24 6 views
0

Seine Methode von CopyOnWriteArrayList.classCopyOnWriteArrayList synchronisierte Methoden

public synchronized boolean set(E e) { 
     Object[] newElements = elements.clone(); 
     @SuppressWarnings("unchecked") 
     E result = (E) newElements[index]; 
     newElements[index] = e; 
     elements = newElements; 
     return result; 
    } 

Ok, lässt ich habe sagen

final List<MyType> list = new CopyOnWriteArrayList(); 

und ich habe Methode

public void update(Task task) { 
    synchronized (tasksList) { 
      int index = tasksList.indexOf(task); 
      validateIndex(index); 
      tasksList.set(index, task); 
     } 
} 

Ich dachte, als CopyOnWriteArrayList synchronisierte Methode " eingestellt "on (this)

In meiner Methode blockierte ich meine Liste (synchronisierte (tasksList)) warum die Methode funktioniert. Ich dachte, Zeile (tasksList.set (index, task);) wird nicht funktionieren, da tasksList bereits blockiert Linie über

Antwort

0

Der gleiche Thread kann eine synchronisierte Methode innerhalb es aufrufen - eine andere synchronisierte Methode auf der gleichen Instanz. Da dieser Thread die Monitorprobleme besitzt, wird kein zweiter Aufruf erstellt.

Verwandte Themen