Einführung in die objektorientierte Programmierung

Threads mit "extends Thread"

class Thr1 extends Thread{
 
 String name;
 
 public Thr1(String name){
 this.name=name;
 }
 
 public void run(){
 for (int i=1; i<=100;i++ ) {
 System.out.println(name);
 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++ ) {
 System.out.println("Main");
 } // end of for
 }
 
 } 

Threads mit "implements Runnable"

 class Thr2 implements Runnable{

public void run(){
for (int i=1;i<=100 ;i++ ) {
System.out.println("Thread");
} // end of for
}

public static void main(String args[]){
Thr2 o= new Thr2();
Thread t= new Thread(o);
t.start();

}

}


Aufgabe 1

public class Warum {
public static void main(String[] argv) {
Test t = new Test();
t.start();
t.dotry();
t.anhalten();
}
}
class Test extends Thread {
volatile boolean anhalten=false;
public void run() {
while (! anhalten) {
System.out.println("Hallo, ich komme.");
try {
Thread.sleep(500);
} catch (InterruptedException e) {
e.printStackTrace();
}
}
}
// 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!");
}

public void anhalten(){
anhalten=true;
}
}

Aufgabe 2

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.");
 }
 }

Philosophenproblem

class Main{

public static void main(String[] args){
Tisch tisch=new Tisch();
Philosoph p1=new Philosoph(1,tisch);
Philosoph p2=new Philosoph(2,tisch);
Philosoph p3=new Philosoph(3,tisch);
Philosoph p4=new Philosoph(4,tisch);
Philosoph p5=new Philosoph(5,tisch);
p1.start();
p2.start();
p3.start();
p4.start();
p5.start();
}
}
class Tisch{
boolean[] staebchen=new boolean[5];

Tisch(){
for (int i=0;i<5 ;i++ ) {
staebchen[i]=true;
} // end of for
}
}
class Philosoph extends Thread{
int name;
String zustand;
int links; int rechts;
Tisch tisch;

Philosoph(int nr, Tisch t){
name=nr;
links=nr-1; rechts= nr % 5;
tisch=t;
// zustand="philosophierend";
}

public void run(){
while (true) {
zustand="philosophierend";
System.out.println(name+ " "+ zustand);
try{sleep(Math.round( Math.random()*5000));}
catch (InterruptedException e){}
zustand="hungrig";
System.out.println(name+ " "+ zustand);
try{sleep(Math.round( Math.random()*5000));}
catch (InterruptedException e){}
nehmen(links);
System.out.println(name+ " links nehmen "+ links);
try{sleep(Math.round( Math.random()*5000));}
catch (InterruptedException e){}

nehmen(rechts);
System.out.println(name+ " rechts nehmen"+ rechts);
try{sleep(Math.round( Math.random()*5000));}
catch (InterruptedException e){}

zustand="essend";
System.out.println(name+ " "+ zustand);
try{sleep(Math.round( Math.random()*5000));}
catch (InterruptedException e){}

ablegen(links);
System.out.println(name+ " links ablegen "+ links);
try{sleep(Math.round( Math.random()*5000));}
catch (InterruptedException e){}

ablegen(rechts);
System.out.println(name+ " rechts ablegen "+ rechts);
try{sleep(Math.round( Math.random()*5000));}
catch (InterruptedException e){}

} // end of while
}

synchronized void nehmen(int nr){
while (!tisch.staebchen[nr]) {
try{
wait();
}
catch (InterruptedException e){}
} // end of if-else
tisch.staebchen[nr]=false;
}

synchronized void ablegen(int nr){
tisch.staebchen[nr]=true;
notifyAll();
}

}