Java - Threads: Unterschied zwischen den Versionen
Aus Wikizone
| Zeile 56: | Zeile 56: | ||
Thread t2 = new Thread( new CounterCommand() ); | Thread t2 = new Thread( new CounterCommand() ); | ||
t2.start(); | t2.start(); | ||
| + | </pre> | ||
| + | |||
| + | == Interrupting Threads == | ||
| + | <pre> | ||
| + | private volatile Thread runner; | ||
| + | |||
| + | public synchronized void startThread(){ | ||
| + | if(runner == null){ | ||
| + | runner = new Thread(this); | ||
| + | runner.start(); | ||
| + | } | ||
| + | } | ||
| + | |||
| + | public synchronized void stopThread(){ | ||
| + | if(runner != null){ | ||
| + | Thread moribund = runner; | ||
| + | runner = null; | ||
| + | moribund.interrupt(); | ||
| + | } | ||
| + | } | ||
| + | |||
| + | public void run(){ | ||
| + | while(Thread.currentThread() == runner){ | ||
| + | //do stuff which can be interrupted if necessary | ||
| + | } | ||
| + | } | ||
</pre> | </pre> | ||
Version vom 9. März 2013, 18:24 Uhr
Links
Thread über Vererbung von Thread
- Klasse erstellen die von Thread erbt
- run() Methode mit gewünschter Funktionalität überschreiben
- Objekt der Klasse erstellen
- start() Methode aufrufen (nicht run() sonst läuft es nicht parallel)
public class DateThread extends Thread
{
@Override public void run()
{
for ( int i = 0; i < 20; i++ )
System.out.println( new Date() );
}
}
Thread t = new DateThread();
t.start();
// oder
// new DateThread().start();
Vorteil: Der Konstruktor des Threads kann ohne runnable Objekt aufgerufen werden, weil das Objekt die run Methode schon geerbt hat.
Thread über implements Runnable
- Klasse erstellen die Runnable implementiert -> Vorteil extends ist frei für andere Vererbung
- Aufgabe in run() definieren
- Thread Objekt erstellen und diesem ein Objekt der neuen Klasse übergeben.
- Thread mit start() starten
Beispiel
package com.tutego.insel.thread;
public class DateCommand implements Runnable
{
@Override public void run()
{
for ( int i = 0; i < 20; i++ )
System.out.println( new java.util.Date() );
}
}
class CounterCommand implements Runnable
{
@Override public void run()
{
for ( int i = 0; i < 20; i++ )
System.out.println( i );
}
}
Thread t1 = new Thread( new DateCommand() );
t1.start();
Thread t2 = new Thread( new CounterCommand() );
t2.start();
Interrupting Threads
private volatile Thread runner;
public synchronized void startThread(){
if(runner == null){
runner = new Thread(this);
runner.start();
}
}
public synchronized void stopThread(){
if(runner != null){
Thread moribund = runner;
runner = null;
moribund.interrupt();
}
}
public void run(){
while(Thread.currentThread() == runner){
//do stuff which can be interrupted if necessary
}
}