//In Thr1 ist kein gemeinsamer Speicher für beide Threads
class Thr1 extends Thread{ String name; int zaehler=0; public Thr1(String name){ this.name=name; } public void run(){ for (int i=1; i<=100;i++ ) { zaehler++; System.out.println(name+" "+zaehler); try{ sleep(Math.round( (Math.random()*1000))); } catch (InterruptedException e){ } } // end of for } public static void main(String[] args){ Thr1 t1= new Thr1("Thread1"); Thr1 t2= new Thr1("Thread2"); t1.start(); t2.start(); for (int i=1;i<=100 ;i++ ) { try{ sleep(Math.round( (Math.random()*1000))); System.out.println("Main"); } catch (InterruptedException e){ } } // end of for } }
//In Thr2 wird zaehler als gemeinsamer Speicher für beide Threads benutzt
class Thr2 implements Runnable{ String name; int zaehler=0; public Thr2(String name){ this.name=name; }
public void run(){ for (int i=1; i<=100;i++ ) { zaehler++; System.out.println(name+" "+zaehler); try{ Thread.sleep(Math.round( (Math.random()*1000))); } catch (InterruptedException e){
} } // end of for } public static void main(String[] args){ Runnable o1= new Thr2("Thread1"); //Runnable o2= new Thr2("Thread2"); Thread t1= new Thread(o1); Thread t2= new Thread(o1); t1.start(); t2.start(); for (int i=1;i<=100 ;i++ ) { try{ Thread.sleep(Math.round( (Math.random()*1000))); System.out.println("Main"); } catch (InterruptedException e){ } } // end of for } }
public class Warum {
public static void main(String[] argv) {
Test t = new Test();
t.start();
t.dotry();
t.interrupt();
}
}
class Test extends Thread {
public void run() {
boolean weiter = true;
while (weiter) {
System.out.println("Hallo, ich komme.");
try {
Thread.sleep(500);
} catch (InterruptedException e) {
e.printStackTrace();
weiter =false;
}
if (interrupted()) {
weiter =false;
} // end of if
}
}
// Zum Beenden Enter-Taste druecken
void dotry() {
try {
while (System.in.read() == 0) {
}
} catch (Exception e) {
e.printStackTrace();
}
System.out.println("Ich gehe. Auf Wiedersehen!");
}
}
import java.awt.*;
import java.awt.event.*;
class Fenster extends Frame implements ActionListener {
boolean state = false;
Fenster() {
setSize(300, 100);
setLocation(100, 100);
Button b = new Button("Kick me!");
b.addActionListener(this);
addWindowListener(new WindowAdapter() {
public void windowClosing(WindowEvent ev) {
System.exit(0);
}
});
add(b, BorderLayout.CENTER);
actionPerformed(null);
setVisible(true);
}
public void actionPerformed(ActionEvent e) {
if (!state)
setTitle("Da staunt ihr ...");
else
setTitle("... nicht schlecht.");
state = !state;
}
public static void main(String[] args) {
new Fenster();
System.out.println("Also ich bin hier jetzt fertig.");
}
}
class Main{
public static void main(String[] args){
Tisch t=new Tisch();
Philosoph p1= new Philosoph(1,t);
Philosoph p2= new Philosoph(2,t);
Philosoph p3= new Philosoph(3,t);
Philosoph p4= new Philosoph(4,t);
Philosoph p5= new Philosoph(5,t);
p1.start();
p2.start();
p3.start();
p4.start();
p5.start();
}
} class Tisch {
public boolean[] staebchen_benutzt = new boolean[5];
public boolean links_belegt(int philnr){
return staebchen_benutzt[philnr-1];
}
public void links_aufnehmen(int philnr){
staebchen_benutzt[philnr-1]=true;
}
public boolean rechts_belegt(int philnr){
int nr;
nr=philnr;
if (philnr==5) {
nr=0;
} // end of if
return staebchen_benutzt[nr];
}
public void rechts_aufnehmen(int philnr){
int nr;
nr=philnr;
if (philnr==5) {
nr=0;
} // end of if
staebchen_benutzt[nr]=true;
}
public void links_ablegen(int philnr){
staebchen_benutzt[philnr-1]=false;
}
public void rechts_ablegen(int philnr){
int nr;
nr=philnr;
if (philnr==5) {
nr=0;
} // end of if
staebchen_benutzt[nr]=false;
}
} class Philosoph extends Thread{
int name=0;
Tisch t;
Philosoph(int name, Tisch t){
this.name=name; this.t=t;
}
public void run(){
while (true) {
philosophieren();
hungern();
st_links();
st_rechts();
essen();
st_links_weg();
st_rechts_weg();
} // end of while
}
void philosophieren(){
System.out.println("Philosoph "+name+ " philosopiert");
try{
sleep( (long) (Math.random()*1000));
}
catch(InterruptedException ie){
}
}
void hungern(){
System.out.println("Philosoph "+name+ " hungert");
try{
sleep( (long) (Math.random()*1000));
}
catch(InterruptedException ie){
}
}
void essen(){
System.out.println("Philosoph "+name+ " isst");
try{
sleep( (long) (Math.random()*1000));
}
catch(InterruptedException ie){
}
}
synchronized void st_links(){
System.out.println("Philosoph "+name+ " will linkes Stäbchen");
boolean belegt=t.links_belegt(this.name);
if (belegt) {
try{
wait();
}
catch(InterruptedException ie){
}
} // end of if
t.links_aufnehmen(this.name);
System.out.println("Philosoph "+name+ " nimmt linkes Stäbchen");
try{
sleep( (long) (Math.random()*1000));
}
catch(InterruptedException ie){
}
}
synchronized void st_rechts(){
System.out.println("Philosoph "+name+ " will rechtes Stäbchen");
boolean belegt=t.rechts_belegt(this.name);
if (belegt) {
try{
wait();
}
catch(InterruptedException ie){
}
} // end of if
t.rechts_aufnehmen(this.name);
System.out.println("Philosoph "+name+ " nimmt rechtes Stäbchen");
try{
sleep( (long) (Math.random()*1000));
}
catch(InterruptedException ie){
}
}
synchronized void st_links_weg(){
t.links_ablegen(this.name);
notifyAll();
}
synchronized void st_rechts_weg(){
t.rechts_ablegen(this.name);
notifyAll();
}
}
class Main{
public static void main(String[] args){
Tisch t=new Tisch();
Philosoph p1= new Philosoph(1,t);
Philosoph p2= new Philosoph(2,t);
Philosoph p3= new Philosoph(3,t);
Philosoph p4= new Philosoph(4,t);
Philosoph p5= new Philosoph(5,t);
p1.start();
p2.start();
p3.start();
p4.start();
p5.start();
}
} class Tisch {
int am_tisch=0;
public boolean[] staebchen_benutzt = new boolean[5];
public boolean links_belegt(int philnr){
return staebchen_benutzt[philnr-1];
}
public void links_aufnehmen(int philnr){
staebchen_benutzt[philnr-1]=true;
}
public boolean rechts_belegt(int philnr){
int nr;
nr=philnr;
if (philnr==5) {
nr=0;
} // end of if
return staebchen_benutzt[nr];
}
public void rechts_aufnehmen(int philnr){
int nr;
nr=philnr;
if (philnr==5) {
nr=0;
} // end of if
staebchen_benutzt[nr]=true;
}
public void links_ablegen(int philnr){
staebchen_benutzt[philnr-1]=false;
}
public void rechts_ablegen(int philnr){
int nr;
nr=philnr;
if (philnr==5) {
nr=0;
} // end of if
staebchen_benutzt[nr]=false;
}
boolean darf_sitzen(int philnr){
return (am_tisch <4 );
}
void setzt_sich(int philnr){
if (am_tisch<4 ) am_tisch++ ;
}
void steht_auf(int philnr){
am_tisch-- ;
}
} class Philosoph extends Thread{
int name=0;
Tisch t;
Philosoph(int name, Tisch t){
this.name=name; this.t=t;
}
public void run(){
while (true) {
philosophieren();
hungern();
setzen();
st_links();
st_rechts();
essen();
st_links_weg();
st_rechts_weg();
aufstehen();
} // end of while
}
void philosophieren(){
System.out.println("Philosoph "+name+ " philosopiert");
try{
sleep( (long) (Math.random()*1000));
}
catch(InterruptedException ie){
}
}
void hungern(){
System.out.println("Philosoph "+name+ " hungert");
try{
sleep( (long) (Math.random()*1000));
}
catch(InterruptedException ie){
}
}
void essen(){
System.out.println("Philosoph "+name+ " isst");
try{
sleep( (long) (Math.random()*1000));
}
catch(InterruptedException ie){
}
}
synchronized void st_links(){
System.out.println("Philosoph "+name+ " will linkes Stäbchen");
boolean belegt=t.links_belegt(this.name);
if (belegt) {
try{
wait();
}
catch(InterruptedException ie){
}
} // end of if
t.links_aufnehmen(this.name);
System.out.println("Philosoph "+name+ " nimmt linkes Stäbchen");
try{
sleep( (long) (Math.random()*1000));
}
catch(InterruptedException ie){
}
}
synchronized void st_rechts(){
System.out.println("Philosoph "+name+ " will rechtes Stäbchen");
boolean belegt=t.rechts_belegt(this.name);
if (belegt) {
try{
wait();
}
catch(InterruptedException ie){
}
} // end of if
t.rechts_aufnehmen(this.name);
System.out.println("Philosoph "+name+ " nimmt rechtes Stäbchen");
try{
sleep( (long) (Math.random()*1000));
}
catch(InterruptedException ie){
}
}
synchronized void st_links_weg(){
t.links_ablegen(this.name);
notifyAll();
}
synchronized void st_rechts_weg(){
t.rechts_ablegen(this.name);
notifyAll();
}
synchronized void setzen(){
System.out.println("Philosoph "+name+ " will sich setzen");
boolean frei=t.darf_sitzen(this.name);
if (! frei) {
try{
wait();
}
catch(InterruptedException ie){
}
} // end of if
t.setzt_sich(this.name);
System.out.println("Philosoph "+name+ " setzt sich");
try{
sleep( (long) (Math.random()*1000));
}
catch(InterruptedException ie){
}
}
synchronized void aufstehen(){
System.out.println("Philosoph "+name+ " will aufstehen");
t.steht_auf(this.name) ;
notifyAll();
}
}