Thread mit extends |
class MyThread extends Thread |
Erbt von Thread |
|
public void run(){ .... } |
Definiert Thread |
|
Thread myThread = new MyThread(); |
Erzeugt Thread-Objekt |
|
myThread.start(); |
Startet Thread |
Thread mit Runnable |
class Berechnung implements Runnable |
Erbt vom Interface |
|
public void run(){ .... } |
Definiert Thread |
|
Runnable target = new Berechnung() |
Erzeugt Runnable-Objekt |
|
Thread myThread = new Thread(target); |
Erzeugt Thread-Objekt |
|
myThread.start(); |
Startet Thread |
sleep |
sleep(zahl); |
Thread schläft zahl Millisekunden |
volatile |
volatile boolean b=true; |
Variable soll für alle Threads aktuell gehalten werden |
Interrupt |
t.interrupt(); |
Unterbricht Thread t |
|
interrupted() |
Überprüft den Interrupt des aktuellen Threads |
|
t.IsInterrupted() |
Überprüft den Interrupt von t |
|
catch(InterruptedException ie) |
Ist catch-Klausel für Interrupt |
yield |
yield |
Signalisiert, dass der Thread den Prozessor freigeben will |
Sychronisierung |
synchronized void meth(){ ... } |
Synchronisiert die Methode |
|
synchronized static void meth(){ ... } |
Synchronisiert die statische Methode |
|
synchronized (Ausdruck) Block |
Synchronisiert den Block, Ausdruck steht für ein Objekt |
Wait |
X.wait() |
Warteliste für X |
|
X.notify() |
Wählt Thread aus Warteliste von X aus |
|
X.notifyAll() |
Wählt alle Threads aus Warteliste von X aus |
parallel.java
public class parallel implements Runnable{ String wort=""; parallel(String w){ wort=w ; }
public void run(){ for (int i=0;i<100;i++) System.out.println(wort); }
public static void main(String[] args) { Runnable p1=new parallel("a"); Thread t1=new Thread(p1); Runnable p2=new parallel("b"); Thread t2=new Thread(p2); t1.start(); t2.start(); } }
warten.java
public class warten extends Thread{
String wort="";
int zeit=0;
warten(String w,int t){
wort=w ; zeit=t;
}
public void run(){ while (true){ System.out.println(wort); try{ sleep(zeit); } catch(InterruptedException ie){} } }
public static void main(String[] args) { Runnable p1=new warten("a",5000); Thread t1=new Thread(p1); Runnable p2=new warten("b",8000); Thread t2=new Thread(p2); t1.start(); t2.start(); } }
konten_monitor2.java
public class konten_monitor2 extends Thread{
static int konto[]=new int[100];
int zeit=0;
int betrag=0;
konten_monitor2(int b,int t){
betrag=b ; zeit=t;
}
public void run(){ buchen(); } public void buchen(){ synchronized(konto) { int k=konto[1]; try{ sleep(zeit); } catch(InterruptedException ie){} if (k>=betrag) konto[1]=konto[1]-betrag; System.out.println(k+" - "+betrag+" = "+konto[1]); } }
public static void main(String[] args) { konto[1]=500; Runnable p1=new konten_monitor2(400,1000); Thread t1=new Thread(p1); Runnable p2=new konten_monitor2(200,5000); Thread t2=new Thread(p2); t1.start(); t2.start(); } }
Prozess.java
import java.util.*;
public class Prozess extends Thread{ int lager[]=new int[100]; int zeit=0; int nr=-1; public synchronized void holen() throws InterruptedException{ try{ if (istLeer()) wait(); notify(); int a=lager[nr]; System.out.println("Verbraucht "+nr+" "+a); nr--; // notify(); } catch(InterruptedException ie){} }
public synchronized boolean istLeer(){ return (nr==-1); } public synchronized void ablegen(int a) throws InterruptedException { try{ if (istVoll()) wait(); notifyAll(); nr++; lager[nr]=a; System.out.println("Erzeugt "+nr+" "+lager[nr]); // notify(); } catch(InterruptedException ie){} }
public synchronized boolean istVoll(){ return (nr==99); }
public static void main(String[] args) { Prozess lager=new Prozess(); Runnable p1=new erzeuger(lager,30); Thread t1=new Thread(p1); // Runnable p2=new Prozess(200,500); // Thread t2=new Thread(p2); Runnable v1=new verbraucher(lager,20); Thread t3=new Thread(v1); t1.start(); // t2.start(); t3.start(); } } erzeuger.java
import java.util.*;
public class erzeuger extends Thread{ int zeit=0; Prozess lager;
erzeuger(Prozess lager,int t){ zeit=t; this.lager=lager; }
public void run(){ while(true){ try{ int a=(int) (Math.random()*1000); lager.ablegen(a); if (lager.nr==99) zeit=30; if (lager.nr==0) zeit=10; sleep(zeit); } catch(InterruptedException ie){} } } }
verbraucher.java
import java.util.*;
public class verbraucher extends Thread{ int zeit=0; Prozess lager; verbraucher(Prozess lager,int t){ zeit=t; this.lager=lager; }
public void run(){ while(true){ try{ if (lager.nr==0) zeit=30; if (lager.nr==99) zeit=10; lager.holen(); sleep(zeit); } catch(InterruptedException ie){} } } }
ThreadApplet.html <html>
<head>
<title>ThreadApplet-Applet</title>
</head>
<body>
<h1>ThreadApplet-Applet</h1>
<hr>
<applet code="ThreadApplet.class" width="300" height="300">
</applet>
<hr>
</body>
</html> ThreadApplet.java
import java.awt.*;
import java.awt.event.*;
import java.applet.Applet;
public class ThreadApplet extends Applet{ // Anfang Variablen private Button button1 = new Button(); private TextField textField1 = new TextField(); private Button button2 = new Button(); private Button button3 = new Button(); private Button button4 = new Button(); Thread t1=null; Zaehlen p1=null; // Ende Variablen
public void init() { Panel cp = new Panel(null); cp.setBounds(0, 0, 300, 300); add(cp); // Anfang Komponenten
button1.setBounds(48, 24, 121, 33); button1.setLabel("Start"); cp.add(button1); button1.addActionListener(new ActionListener() { public void actionPerformed(ActionEvent evt) { p1=new Zaehlen(textField1); t1=new Thread(p1); t1.start(); button1.setVisible(false); button2.setVisible(false); button3.setVisible(true); } });
textField1.setBounds(112, 104, 145, 24); textField1.setText("0"); cp.add(textField1); button2.setBounds(48, 176, 121, 33); button2.setLabel("Weiter"); cp.add(button2); button2.setVisible(false); button2.addActionListener(new ActionListener() { public void actionPerformed(ActionEvent evt) { t1=new Thread(p1); t1.start(); button1.setVisible(false); button2.setVisible(false); button3.setVisible(true);
} }); button3.setBounds(48, 216, 121, 33); button3.setLabel("Unterbrechen"); cp.add(button3); button3.setVisible(false); button3.addActionListener(new ActionListener() { public void actionPerformed(ActionEvent evt) { t1.interrupt(); button1.setVisible(true); button3.setVisible(false); button2.setVisible(true); } });
}
}
Zaehlen.java
import java.awt.*;
import java.awt.event.*;
import java.applet.Applet;
import java.util.*;
public class Zaehlen extends Thread{
private TextField textField1 = null; int i=0; Zaehlen(TextField tf){ this.textField1=tf; } public void run(){ try{ while (true){ i++; textField1.setText(""+i); sleep(1); } } catch(InterruptedException ie){} } }