Java - Threads
Aus Wikizone
Links[Bearbeiten]
Thread über Vererbung von Thread[Bearbeiten]
- 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[Bearbeiten]
- 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[Bearbeiten]
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[Bearbeiten]
Beispiel (Android)
Boolean flag = true;
Thread secondary = new Thread(new Runnable() {
@Override
public void run() {
while (flag) {
// do something
}
}
});
secondary.start(); //start the thread
flag = false; // this will force secondary to finish its execution
try {
secondary.join(); // wait for secondary to finish
} catch (InterruptedException e) {
throw new RuntimeException(e);
}
Beispiel
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
}
}