Synchronisierung des Zugriffs auf Methoden durch Threads
|
public class MeinThread extends Thread
{
MeinThread(String name)
{
setName(name);
}
public void run()
{
while(true)
{
Hauptprogramm.synchron(this,100);
Hauptprogramm.pausieren(20);
Hauptprogramm.nicht_synchron(this,20);
Hauptprogramm.pausieren(50);
Hauptprogramm.nicht_synchron(this,30);
Hauptprogramm.pausieren(50);
}
}
}
Code 0-1: MeinThread.java - Objekte der obigen Java-Klasse greifen sowohl auf eine synchronisiert und auf eine nicht synchronisierte Methode zu.
public class Hauptprogramm
{
public static void pausieren(long ms)
{
try
{
Thread.sleep(ms);
}
catch(Exception e)
{
}
}
public static synchronized void synchron(Thread x,long dauer)
{
System.out.println("Thread "+x.getName()+" startet die Methode synchron().");
pausieren(dauer);
System.out.println("Thread "+x.getName()+" beendet die Methode synchron().");
}
public static void nicht_synchron(Thread x,long dauer)
{
System.out.println("Thread "+x.getName()+" startet die Methode nicht_synchron().");
pausieren(dauer);
System.out.println("Thread "+x.getName()+" beendet die Methode nicht_synchron().");
}
public static void main(String[] args)
{
MeinThread mA = new MeinThread("A");
MeinThread mB = new MeinThread("B");
mA.start();
mB.start();
pausieren(300);
while(mA==Thread.currentThread());
mA.stop();
while(mB==Thread.currentThread());
mB.stop();
}
}
Code 0-2: Hauptprogramm.java - erzeugt zwei Objekte der Klasse MeinThread.java und startet deren Methode "run()".
Bild 0-1: Ablauf der Aufrufe der synchronisierten und der nicht synchronisierten Methode durch die beiden Threads.
Übung 2
Aufgabe 1
Schreiben Sie basierend auf thread003 ein Java-Programm, bei dem von einem Thread A immer wieder eine Reihe von 100 Meßwerten in ein Array geschrieben werden und diese von einem Thread B immer wieder komplett ausgelesen und auf der Kosnole ausgegeben werden.
|
Beispiellösung zu Aufgabe 1.
Aufgabe 2
Schreiben Sie ein Java-Programm, bei dem die Instanzen eines Threads einzelne Quadratzahlen berechnen. Nachdem alle fertig sind, soll die Gesamt-Summe ausgegeben werden.
Nutzen Sie die Thread-Methode "isAlive()", um zu gewährleisten, dass die Ergebnisse aller Threads vorliegen.
Verwenden Sie sleep(), um die Berechnungszeit jedes Threads künstlich zu verlängern.
Beachten Sie, dass hier in der run()-Methode keine Endlosschleife steht.
Aufgabe 3
|