H
hanulli
Gast
Hallo liebe Community;
Ich hab folgendes Problem:
Die Methoden wait() und notify müssen immer mit synchronisiert werden. Das Synchronisieren mach ich mit dem Befehl:
synchronized (object){ wait();}
Doch wie gestalte ich den diesen Befehl, bzw. welches object übergebe ich in diesem Befehl, wenn das Object -bzw, die Prozedur -, die dann später den notify()-befehl ausführt, zu dem Zeitpunkt der Initialisierung der wait() Methode noch nicht feststeht?
Ich hoffe, ihr habt meine Fragestellung verstanden! Falls nicht gebe ich noch ein kleines Beispiel:
Das folgende Programm erzeugt verschiedene Objekte namens Besucher1, Besucher2....! All diese Besucher wollen Recoder ausleihen, von denen es aber nur 10 Stück gibt. D.h., wenn mehrer als 10 Besucher zur gleichen Zeit ein Recoder wollen, müssen manche Besucher warten, bis die ersten Besucher wieder gehen:
Ich bin für jede Hilfe dankbar!
Ich hab folgendes Problem:
Die Methoden wait() und notify müssen immer mit synchronisiert werden. Das Synchronisieren mach ich mit dem Befehl:
synchronized (object){ wait();}
Doch wie gestalte ich den diesen Befehl, bzw. welches object übergebe ich in diesem Befehl, wenn das Object -bzw, die Prozedur -, die dann später den notify()-befehl ausführt, zu dem Zeitpunkt der Initialisierung der wait() Methode noch nicht feststeht?
Ich hoffe, ihr habt meine Fragestellung verstanden! Falls nicht gebe ich noch ein kleines Beispiel:
Das folgende Programm erzeugt verschiedene Objekte namens Besucher1, Besucher2....! All diese Besucher wollen Recoder ausleihen, von denen es aber nur 10 Stück gibt. D.h., wenn mehrer als 10 Besucher zur gleichen Zeit ein Recoder wollen, müssen manche Besucher warten, bis die ersten Besucher wieder gehen:
Code:
import java.util.*;
public class verleih{
public static void main(String [] args){
String name="Besucher";
int i=0;
while(true){
try{
int counter=0;
for(int d=i;d>0;d/=10){
counter++;
}i++;
name=name.substring(0,name.length()-counter);
name+=i;
Random ran=new Random();
Thread.sleep(ran.nextInt(1000));
}
catch(InterruptedException e){}
new besucher(name).start();
}
}
}
Code:
import java.util.*;
public class besucher extends Thread{
static int recoder=10;
static int counter2=0;
static Vector<besucher> besuch=new Vector();
String name;
long neededtime;
public besucher(String name){
this.name=name;
}
public void run(){
Random ran=new Random();
while(recoder==0){
try{
synchronized (this){
// Das Object this hier zu übergeben ist ganz falsch... Wie mach ich es richtig?
System.out.println(name +" will jezt ein recorder");
long start = new Date().getTime();
besuch.add(this);
wait();
long runningTime = new Date().getTime() - start;
neededtime+=runningTime;
System.out.println("sequencetime"+ neededtime);
}}
catch(InterruptedException e){}
}
System.out.println(name+ " hat jetzt einen bekommen");
recoder-=1;
try{
sleep(ran.nextInt(12000));
}
catch(InterruptedException e){}
System.out.println(name+ " ist jetzt fertig");
recoder++;
if(!besuch.isEmpty()){
synchronized (besuch.firstElement()){
notify();
counter2++;
hans.remove(besuch.firstElement());
}}
}
}