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.
|
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
|