Singleton und MultiThreading [erledigt]

Status
Nicht offen für weitere Antworten.

hellcoder

Mitglied
Hallo,

Ich beschäftige mich gerade mit dem Entwurfsmuster Singleton und verstehe die Gefahr des MultiThreadings noch nicht völlig.

Folgender Code sollte doch dazu führen, das 2 Objekte des Singleton erzeugt werden ?


Code:
public class testMultiThreadingMain {

  public static void main(String[] args) {
	testMultiThreadingThread a = new testMultiThreadingThread("Thread A");
	testMultiThreadingThread b = new testMultiThreadingThread("Thread B");

        a.run();
	b.run();

	if (a.getInstanceSingelton().equals(b.getInstanceSingelton()))
		System.out.println("Objekte sind identisch");
	else
		System.out.println("Objekte unterschiedlich !!!");

	ProblemMultiThreading Singelton = ProblemMultiThreading.getInstance();
		
	System.out.println(Singelton.getEntry("Thread B"));   
	System.out.println(Singelton.getSize());    //Sollte 1 sein und nicht 2 ?

	}
}

Code:
public class testMultiThreadingThread extends Thread{

	private String ThreadName;
	private ProblemMultiThreading a;
	
	public testMultiThreadingThread(String name) {
		this.ThreadName = name;
	}
	
	public void run() {
		a = ProblemMultiThreading.getInstance();	//erzeugen einmalige Instanz
		a.setEntry(ThreadName,ThreadName);
	}
	
	public ProblemMultiThreading getInstanceSingelton(){
		return a;
	}
	
}

Code:
public class ProblemMultiThreading {

	private static ProblemMultiThreading myCache = null;
	private Hashtable<String,String> cache;
		
	private ProblemMultiThreading() { 
		cache=new Hashtable<String,String>();
	} 

	public static ProblemMultiThreading getInstance() //
	{ 
		if ( myCache == null ) {
			try {
				Thread.sleep(1000);	//Hier sollte der Fehler entstehen
			} catch (Exception e) {
				e.printStackTrace();
			}			
			myCache = new ProblemMultiThreading();
			System.out.println("hier passiert der Fehler !!");
		}
		
	    return myCache; 
	} 

	public void setEntry(String key, String value) {
		cache.put(key, value); 
	} 

	public String getEntry(String key) { 
		return cache.get(key); 
	} 

	public int getSize() { 
		return cache.size(); 
	} 
}



Viele Grüße,

hellcoder
 
M

maki

Gast
Multithreading Probleme kann man so gut wie gar nicht simulieren oder zumindest nur sehr schwer, da gehört schon einiges dazu.

Dein Singleton ist übrigens nicht Threadsicher.
Man kann es auch ohne synchronisation lösen ;)

Ein echtes Singleton ist es nur, solange nicht mehrere Classloader im Spiel sind oder jemand einen Anschlag mit reflections ausübt.
 

Wildcard

Top Contributor
Davon abgesehen werden Threads mit start und nicht mit run gestartet. So hast du nur einen Thread.
Weiterhin gibt es extrem wenige echte Anwendungsfälle für Singeltons, das ist das weit größere Problem als die Sache mit den Threads.
 

hellcoder

Mitglied
Davon abgesehen werden Threads mit start und nicht mit run gestartet. So hast du nur einen Thread.

Danke Wildcard, genau da war der Feher... :toll:

Weiterhin gibt es extrem wenige echte Anwendungsfälle für Singeltons, das ist das weit größere Problem als die Sache mit den Threads.

Sehe ich auch so. Denke aber in folgenden Fällen kann ein Singleton gute Dienste leisten:

Konfigurationsdateien, Logdateien, sonstige Dateien
Caches
Zugriff auf Hardwareressourcen (z.b Bandlaufwerk, Druckerspooler)
Netzwerk (z.B Verwalten Webserver)
Serialisierung ??
Datenbanken








Viele Grüße,

hellcoder
 
Status
Nicht offen für weitere Antworten.
Ähnliche Java Themen
  Titel Forum Antworten Datum
EinNickname9 Best Practice Singleton und Singleton mit Instanz zu anderer Klasse -Pattern Allgemeine Java-Themen 30
Neoline Klassen Singleton Klasse buchmanager Allgemeine Java-Themen 19
J Singleton Allgemeine Java-Themen 5
Z deserialize singleton Allgemeine Java-Themen 9
A Singleton threadsafe Allgemeine Java-Themen 8
S Singleton Instanz löschen Allgemeine Java-Themen 5
A Datei als Object einlesen und das Object als Singleton instance setzen. Allgemeine Java-Themen 13
T ActionListener und Singleton Allgemeine Java-Themen 15
S Singleton Entwurfsmuster Allgemeine Java-Themen 20
T So eine Art Singleton-Factory? Allgemeine Java-Themen 3
S Singleton-Klasse und ThreadLocal-Klasse von abstrakter Klasse ableiten? Allgemeine Java-Themen 2
S Singleton hier sinnvol? Allgemeine Java-Themen 20
T Zugriff auf Singleton verkürzen - Namespaces?? Allgemeine Java-Themen 20
B Volatile Frage: Reicht es nur den Singleton als volatile zu deklarieren? Allgemeine Java-Themen 4
Iron Monkey Singleton mit Parameter Allgemeine Java-Themen 14
G Singleton Frage: Allgemeine Java-Themen 17
M Singleton und Vererbung? Allgemeine Java-Themen 45
R Wo initilisiere ich eine Liste in einem Singleton? Allgemeine Java-Themen 2
M Java Garbage Collector Frage (Singleton Pattern) Allgemeine Java-Themen 13
B Generisches Singleton implementieren Allgemeine Java-Themen 12
S Singleton Pattern mit Generics Allgemeine Java-Themen 4
P SingleTon Allgemeine Java-Themen 5
M zwei Threads - ein singleton-Objekt Allgemeine Java-Themen 3
RaoulDuke Agent als Singleton Thread Allgemeine Java-Themen 7
S singleton vs. static Allgemeine Java-Themen 7
P Singleton vs static Allgemeine Java-Themen 19
K Singleton vererben Allgemeine Java-Themen 15
E Singleton vererben Allgemeine Java-Themen 10
E Frage zu Singleton Allgemeine Java-Themen 22
D Design Pattern: Singleton Allgemeine Java-Themen 4
K Sequenzdiagramm für Singleton-Muster Allgemeine Java-Themen 5
W Multithreading Alphabet Allgemeine Java-Themen 3
T Multithreading: Wie viele Threads sollte ich erstellen? Allgemeine Java-Themen 12
J Threads Multithreading Allgemeine Java-Themen 15
K Multithreading plattform übergreifend? Allgemeine Java-Themen 3
R Bruteforce hashes mit multithreading. Funktioniert das so? Allgemeine Java-Themen 0
B Threads Multithreading Threads sollen warten Allgemeine Java-Themen 12
K Multithreading: Service(Task), wait und continue Allgemeine Java-Themen 21
M JUnit & Multithreading - sehr seltener Fehler Allgemeine Java-Themen 3
C Ressourcensparendes Multithreading Allgemeine Java-Themen 3
A Multithreading mit JButtons Allgemeine Java-Themen 5
S Threads Multithreading- langsamer als Singlethreading-Programm Allgemeine Java-Themen 6
D Threads Multithreading Allgemeine Java-Themen 25
A MultiThreading.. Scheduling-Problem? Allgemeine Java-Themen 10
M Multithreading Problem Allgemeine Java-Themen 3
dayaftereh Multithreading Allgemeine Java-Themen 16
E Multithreading and volatile Allgemeine Java-Themen 10
J Wie die gleichzeitige Ausführung mehrerer Tasks trotz Multithreading verhindern? Allgemeine Java-Themen 2
G multithreading, concurrency conveyor belt beispiel Allgemeine Java-Themen 2
A Problem mit Zufallszahlen und Multithreading Allgemeine Java-Themen 14
I Problem mit Multithreading Allgemeine Java-Themen 4
C Collection Multithreading? Allgemeine Java-Themen 33
O Multithreading mit Java 5 u den Concurrency APIs Allgemeine Java-Themen 7
O Multithreading und Multiprozessor Allgemeine Java-Themen 4
K Multithreading bei statischen Methoden Allgemeine Java-Themen 2
T ungewöhnliche Exception (Multithreading und JList) Allgemeine Java-Themen 10
K Frage zu ProgressBars, Algorithmen und Multithreading ->F Allgemeine Java-Themen 2
flashfactor Multithreading-Problem Allgemeine Java-Themen 4
B Schlüsselworte [ERLEDIGT] static { } - Was ist das und wofür kann ich das brauchen? Allgemeine Java-Themen 1
H JUnit Fehler beim Compilieren - erledigt Allgemeine Java-Themen 0
D Dyn. Schneefall (Synchronisationsprobleme: Erledigt) Allgemeine Java-Themen 7
DStrohma [Erledigt] Wieso kann ich Taste 'ENTER' in JTable nicht belegen? Allgemeine Java-Themen 2
DStrohma [Erledigt] Regex CASE INSENSITIVE Allgemeine Java-Themen 7
P [erledigt] Java-Code in Ausarbeitung dokumentieren Allgemeine Java-Themen 2
K [erledigt] JVM welche läuft Allgemeine Java-Themen 9
D [erledigt] Dateiinformationen auslesen Allgemeine Java-Themen 10

Ähnliche Java Themen

Neue Themen


Oben