Thread Programmierung

Status
Nicht offen für weitere Antworten.
G

Guest

Gast
Hallo,

ich habe an der Uni eine Aufgabe zur Thread-Programmierung erhalten, habe aber keine Ahnung wie ich das realisieren soll. Habe noch nie mit Threads in Java gearbeitet.
Folgende Aufgabe:

In der Vorlesung lernen Sie demnächst das Produzenten/Konsumenten-Problem kennen, bei dem ein
Produzent Objekte in einen Puffer einfügt und der Konsument diese ausliest. Im ersten Projekt soll
eine Variante dieses Problems betrachtet werden. Der Produzent schreibt in beliebiger Reihenfolge
die Werte 0...n − 1 in einen Puffer. Der Konsument darf Werte nur der Reihe nach aus dem Puffer
lesen. Um z.B. eine 5 aus dem Puffer lesen zu k¨onnen, muss er vorher bereits eine 4 gelesen haben,
usw.

Aufgabe 1.1
(a) Was fehlt den vorgegebenen Methodenköpfen in der Klasse Queue, damit verschiedene
Threads nebenläufig zugreifen können? Implementieren Sie die fehlenden Methodenrümpfe
der Klasse Queue.
(b) Implementieren Sie die run-Methode der Klasse ConsumerBusyWaiting so, dass sie die
Funktionalität des busy waiting erfüllt.
(Tipp: In Java kann ein Thread für eine gewisse Zeit deaktiviert werden, indem die sleep
Methode aufgerufen wird).
(c) Was sind die Nachteile von busy waiting? Welche Lösungen gibt es?

Aufgabe 1.2 Da busy waiting keine gute Lösung ist, soll das System nun durch Monitore realisiert
werden. Machen Sie sich mit der Benutzung von Monitoren in der Sprache Java vertraut.
(a) Erweitern Sie die Klasse ConsumerMonitor so, dass die Lösung ohne busy waiting auskommt.
(b) Welche Beschränkung gibt es in Java bezüglich der Realisierung von Monitoren?



Code:
public class TestQueue {

	public static void main(String[] args) {
		
		Queue q = new Queue();
		ConsumerBusyWaiting c = new ConsumerBusyWaiting(q, 10);
		Producer p = new Producer(q, 10);
		
		c.start();
		p.start();
		
	}

}



Code:
[code]public class Queue {

	public void read(int n) {

	}
	
	public int lowestValue() {

	}
	
	public boolean isNonEmpty() {

	}
	
	public void add(Integer n) {

	}

}



Code:
import java.util.Random;

public class Producer extends Thread {

	private final Queue q;
	private final int numInputValues;
	
	public Producer(Queue q, int numInputValues) {
		super();
		this.q = q;
		this.numInputValues = numInputValues;
	}

	public void run() {
		
		int[] inputValues = new int[numInputValues];
		
		for(int i = 0; i < numInputValues; i++)
			inputValues[i] = i; 

		// Generiert eine zufaellige Permutation
		Random rng = new Random();
		for(int j = 0; j < 100; j++) {
			int pos1 = rng.nextInt(numInputValues);
			int pos2 = rng.nextInt(numInputValues);
			
			int buf = inputValues[pos1];
			inputValues[pos1] = inputValues[pos2];
			inputValues[pos2] = buf;
		}
		
		for(int i = 0; i < numInputValues; i++) {
			System.out.println("Producer: Writing value " + inputValues[i]);
			q.add(inputValues[i]);
			
			try {
				sleep(10);
			} catch (InterruptedException e) {
				
				e.printStackTrace();
			}
		}
		System.out.println("Producer:
			All values successfully written to the queue");
	}
	
}

Code:
public class ConsumerBusyWaiting extends Thread {
	
	private final int numOutputValues;
	private final Queue q;
	
	public ConsumerBusyWaiting(Queue q, int numOutputValues) {
		super();
		this.numOutputValues = numOutputValues;
		this.q = q;
	}

	public void run() {

	}
}



Code:
public class ConsumerMonitor extends Thread {

}
[/code]

Wäre euch dankbar für eure Hilfe
 
G

Guest

Gast
Folgendes hatte ich mir mal überlegt:


Code:
import java.util.*;
import java.lang.*;

public class Queue {

    Vector v=new Vector();
    
	public synchronized void read(int n) {
            for(int i=0;i<v.size();i++){
                Integer temp=(Integer)v.elementAt(i);
                int help=temp.intValue();
                if(help==n){
                    v.removeElementAt(i);
                }
            }
        }
        
        public synchronized int lowestValue() {
            boolean gefunden=false;
            int help=11;
            for(int i=0;i<10;i++){
                for(int j=0;j<v.size();j++){
                    Integer temp =((Integer)v.elementAt(j));
                    help=temp.intValue();
                    if(help==i){
                       gefunden=true;
                       break;
                    }
                }
                if(gefunden)
                    break;
            }
            return(help);
	}
        
	public synchronized boolean isNonEmpty() {
            return (!v.isEmpty());
	}
	
	public synchronized void add(Integer n) {
            v.add(n);
	}

}


Code:
public class ConsumerBusyWaiting extends Thread {
	
	private final int numOutputValues;
	private final Queue q;
	
	public ConsumerBusyWaiting(Queue q, int numOutputValues) {
		super();
		this.numOutputValues = numOutputValues;
		this.q = q;
	}

	public void run() {
            boolean fertig=false;
            int zaehler=0;
            while(!fertig){
                int n=q.lowestValue();
                if(n==zaehler){
                    q.read(n);
                    System.out.println("Consument: Reading value "+ zaehler);
                    if(zaehler==9){
                        fertig=true;
                        System.out.println("Consument: All values successfully read from queue");
                    }
                    zaehler++;
                }
                else{
                    System.out.println("Consumer: busy waiting");
                }
                try{
                    sleep(10);
                }catch(InterruptedException e){
                    e.printStackTrace();
                }
            }
	}
}
[/code]
 

LastUnicorn

Aktives Mitglied
Wär schön, wenn du sagen würdest an welcher Stelle du genau hängst bzw was du wissen willst. Soooooooooo viel Spaß macht das Code lesen und Debugger spielen nämlich auch nicht.
 
G

Guest

Gast
Gut.
Die Sache mit dem Code ist so gut wie gegessen.
Was ich mir nicht erklären kann sind die Beschränkungen in Java bezüglich der Realisierung von Monitoren.
Was soll mir das sagen?
Gibt es da in Java Unterschiede zu anderen Sprachen?
 
Status
Nicht offen für weitere Antworten.
Ähnliche Java Themen
  Titel Forum Antworten Datum
G thread programmierung für ANFÄNGER Java Basics - Anfänger-Themen 2
G Frage zur Thread-Programmierung Java Basics - Anfänger-Themen 5
D Vorschläge für Umstellung auf Thread-Nutzung erwünscht Java Basics - Anfänger-Themen 7
Z Sikuli Thread Fehler Java Basics - Anfänger-Themen 3
Leyla Thread isInterrupt Java Basics - Anfänger-Themen 18
P Meldung aus Java-Klasse in Thread an aufrufende Klasse Java Basics - Anfänger-Themen 1
A Thread XML-Dateien zusammenfügen Java Basics - Anfänger-Themen 11
F influxdb Upload in eigenem Thread Java Basics - Anfänger-Themen 2
frager2345 Thread - Methoden synchronized deklarieren Java Basics - Anfänger-Themen 10
berserkerdq2 Größter unterschied von extends thread und implements runnable? Java Basics - Anfänger-Themen 2
T Thread beenden aus zweiter Klasse Java Basics - Anfänger-Themen 4
A Thread - Synchronized Java Basics - Anfänger-Themen 10
A Thread Producer - Consumer Java Basics - Anfänger-Themen 1
A Thread-Semhapore Java Basics - Anfänger-Themen 0
A Thread Exchanger Java Basics - Anfänger-Themen 22
A Thread-Cyclicbarrier Java Basics - Anfänger-Themen 4
B In einem Thread Endlosschleife beenden Java Basics - Anfänger-Themen 19
A Thread-Verklemmung Java Basics - Anfänger-Themen 10
A Thread-Schreibe-Lese-Problem Java Basics - Anfänger-Themen 4
A Thread find number Java Basics - Anfänger-Themen 8
F Thread.sleep() Java Basics - Anfänger-Themen 5
F Exception in thread "main" java.lang.ArrayIndexOutOfBoundsException: 11 at main.main(main.java:11) Java Basics - Anfänger-Themen 2
A Thread Java Basics - Anfänger-Themen 3
M Exception in thread "main" java.util.NoSuchElementException Java Basics - Anfänger-Themen 2
A Thread Java Basics - Anfänger-Themen 8
B Compiler-Fehler Fehlermeldung Exception in thread, falsche Eingabewert Java Basics - Anfänger-Themen 2
M Thread-Zustände Java Basics - Anfänger-Themen 6
CptK For-Schleife in Thread nach jedem Durchlauf pausieren Java Basics - Anfänger-Themen 35
S Kriege Fehler "Exception in thread" beim Benutzen von SubStrings. Java Basics - Anfänger-Themen 2
B Endlosschleife Thread sauber beenden Java Basics - Anfänger-Themen 19
D Java Thread wartet nur ein mal Java Basics - Anfänger-Themen 1
D Java Thread wartet nur ein mal Java Basics - Anfänger-Themen 0
O Exception in thread "main" java.lang.ArithmeticException: / by zero Java Basics - Anfänger-Themen 4
C Thread und TimerTask, Verstädnisproblem Java Basics - Anfänger-Themen 10
amgadalghabra Sorting Thread Launcher Java Basics - Anfänger-Themen 3
B Exception in thread "AWT-EventQueue-0" java.util.ConcurrentModificationException Java Basics - Anfänger-Themen 8
A Thread Java Basics - Anfänger-Themen 4
A Thread Java Basics - Anfänger-Themen 1
A Thread Java Basics - Anfänger-Themen 0
R Exception in thread "main" java.lang.ArrayIndexOutOfBoundsException Java Basics - Anfänger-Themen 5
S Compiler-Fehler Exception in thread "main" java.lang.Error: Unresolved compilation problem: Java Basics - Anfänger-Themen 6
L Liste in anderem Thread laden Java Basics - Anfänger-Themen 1
B Thread / Prozess stoppen? Java Basics - Anfänger-Themen 22
I Compiler-Fehler Exception in thread "main" java.lang.ArrayIndexOutOfBoundsException: 5 Java Basics - Anfänger-Themen 3
B Threads Thread sleep() Method einfache Frage Java Basics - Anfänger-Themen 8
W Thread Aufgabe - Vorgehensweise Java Basics - Anfänger-Themen 8
L Liste in anderem Thread laden Java Basics - Anfänger-Themen 0
J Threads PrograssBar update während thread Java Basics - Anfänger-Themen 13
D Compiler-Fehler Wert auf Datenbank übertragen und Sleep Thread Java Basics - Anfänger-Themen 3
Spencer Reid JavaFX Memory Thread.sleep Java Basics - Anfänger-Themen 1
S Thread.sleep mit JProgressBar Java Basics - Anfänger-Themen 1
ralfb1105 Frage zu Thread Synchronisation mit wait() und notify() Java Basics - Anfänger-Themen 3
R Exception in thread "main" java.lang.NullPointerException Java Basics - Anfänger-Themen 10
J JavaFX -> SocketIO -> Thread -> Update Label Java Basics - Anfänger-Themen 13
J Thread Handling Java Basics - Anfänger-Themen 9
A Problem mit Thread.sleep Java Basics - Anfänger-Themen 4
C Thread in Methode + raus aus der Schleife Java Basics - Anfänger-Themen 10
E Threads Thread in While-Schleife nur einmal starten Java Basics - Anfänger-Themen 2
F Daten von Thread an den aufrufenden zurückgeben Java Basics - Anfänger-Themen 22
C Compiler-Fehler Exception in thread "main" java.lang.ArrayIndexOutOfBoundsException: 2 Java Basics - Anfänger-Themen 3
B Thread Problem Java Basics - Anfänger-Themen 7
N KeyListener in Thread Java Basics - Anfänger-Themen 0
M Thread.sleep() Funktion Java Basics - Anfänger-Themen 1
W JLabel in Main aus Thread verändern. Java Basics - Anfänger-Themen 4
D Ausgeben welcher Thread gerade Arbeitet Java Basics - Anfänger-Themen 8
N Threads Thread-Fehler Java Basics - Anfänger-Themen 2
F Thread um Uhrzeit ausführen Java Basics - Anfänger-Themen 5
F Get/Post als eigener Thread mit Rückgabe Java Basics - Anfänger-Themen 5
J Exception in thread "main" Java Basics - Anfänger-Themen 1
F Thread der auf eine Queue wartet, sicher beenden Java Basics - Anfänger-Themen 4
B Animation mit Thread(s) Java Basics - Anfänger-Themen 23
I Thread.sleep (1000); Java Basics - Anfänger-Themen 1
M Threads Jede Klasse einem Thread zuweisen Java Basics - Anfänger-Themen 7
J Java Thread cancel() und wiederbeleben Java Basics - Anfänger-Themen 4
J BouncingBalls 1 Thread Java Basics - Anfänger-Themen 3
L Fehler: Exception in thread "main" java.lang.ArrayIndexOutOfBoundsException Java Basics - Anfänger-Themen 4
J Timer oder Thread programmieren ? Java Basics - Anfänger-Themen 10
fLooojava Laufender Thread | Boolean ändern Java Basics - Anfänger-Themen 9
T Thread Pool mit Work Stealing Java Basics - Anfänger-Themen 1
R Java Thread Java Basics - Anfänger-Themen 10
J Welche Methoden laufen im neuen thread ?? Java Basics - Anfänger-Themen 9
S Java memory fehler: Exception in thread "AWT-EventQueue-0" java.lang.OutOfMemoryError: Java heap spa Java Basics - Anfänger-Themen 5
K Thread - Methoden in die run Methode Schreiben Java Basics - Anfänger-Themen 5
N Threads Exception in thread "main"... Feher bei dem Versuch ein Radius zu berechnen Java Basics - Anfänger-Themen 4
A Code läuft nicht, Fehlermeldung Exception in thread "main" java.lang.Error: Unresolved compilation " Java Basics - Anfänger-Themen 11
V Threads Exception in Thread behandeln Java Basics - Anfänger-Themen 3
S Methoden Multi-Thread und Methoden Objects. Java Basics - Anfänger-Themen 1
J Thread erstellen (BlueJ Projekt) Java Basics - Anfänger-Themen 3
P Exception in thread "main" java.lang.NoClassDefFoundError: Java Basics - Anfänger-Themen 1
F Threads Variable aus einem Thread in main Methode? Java Basics - Anfänger-Themen 9
K Exception in thread "main" Java Basics - Anfänger-Themen 7
L Thread-Frage Java Basics - Anfänger-Themen 2
E Was ist ein idle-thread? Java Basics - Anfänger-Themen 1
D Exception in thread "AWT-EventQueue-0" Java Basics - Anfänger-Themen 8
J Threads Prozess in Thread auslagern Java Basics - Anfänger-Themen 2
G Thread mehrmals starten und schliessen Java Basics - Anfänger-Themen 6
F Thread Koordination (Vorteile/Nachteile) Java Basics - Anfänger-Themen 0
O Thread aus dem Thread stoppen Java Basics - Anfänger-Themen 6
O Swingworker/Thread Java Basics - Anfänger-Themen 3
R Focus auf JPanel im Thread Java Basics - Anfänger-Themen 9

Ähnliche Java Themen

Neue Themen


Oben