singleton Synchronisations Problem?

Status
Nicht offen für weitere Antworten.

HyperHyper

Mitglied
Habe mal ne Frage, und zwar habe ich dieses Singleton:

Code:
package test;
import java.util.ArrayList;

public class Singleton {

	
	private static Singleton INSTANCE = new Singleton();
	
	private static ArrayList myList = new ArrayList();
	
	

	public void addObject(int wert) 
	{
	  myList.add(wert);	
	}

	
	public void removeObject(int index) 
	{
		myList.remove(index);		
	}
	

	public int getCurrentListSize() 
	{
		return myList.size();
	}


	
	private Singleton() 
	{
	}
	
	
	public static synchronized Singleton getInstance() 
	{
		return INSTANCE;
	}
	

	
}

Wenn ich jetzt mehrere Threads habe welche nun auf die Methoden "addObject", "removeObject" und "getCurrentListSize" zugreifen, sind diese Abläufe dann auch noch synchronisiert? Muss ich etwa die Methoden ebenfalls "synchronized" machen?
 
synchronized ist bisher nur das 'Holen' der Instanz,
bei jedem Operationsaufruf (also nach dem Holen der Referenz) besteht derzeit kein Schutz,

ja, alle Operationen synchronized zu machen wäre eine Lösung,
bedenke dann aber das zwischen zwei Aufrufen der Zugriff wieder frei ist,

Beispiel:
Code:
int i = getCurrentListSize();

// Zugriff zu diesem Zeitpunkt wieder frei,
// jemand anders könnte bereits das letzte Element entfernen/ andere einfügen, und und und

if (i == 1) {
   removeObject(0);
}
 
Danke das wollte ich wissen.
Dann werde ich sämtliche Methoden synchronized machen und sämtliche Operationen welche dieselbe gleiche Datenstruktur benötigen in einen synchronized-Block einsperren.
 
Status
Nicht offen für weitere Antworten.

Neue Themen


Zurück
Oben