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();
}
}