|
Timer
Działanie Timeru jest z pewnością znane użytkownikom środowisk programistycznych firmy Borland (np. C++Builder, Delphi) i platformy .NET Framework (np. Visual Studio .NET).
Ogólnie mówiąc Timer jest osobnym wątkiem, uruchamianym o określonym czasie, i ew. powtarzanym w równych odstępach czasu.
Klasie Timer towarzyszy zawsze klasa TimerTask.
TimerTask implementuje interfejs Runnable(patrz: Wielowątkowość), zawiera więc abstrakcyjną metodę run(), którą trzeba przykryć.
Od tej metody rozpoczyna się wykonywanie wątku.
Kolejną metodą klasy TimerTask jest metoda cancel(), która przerywa wątek i zwraca wartość true jeśli się to udało.
Klasa Timer ma kilka konstruktorów:
- Timer()
Domyślny konstruktor tworzący obiekt, który będzie wykonywany jak zwykły wątek.
- Timer(boolean tThread)
Jeśli argument tThread ma wartość true, wykorzystany zostanie dodatkowy wątek demona.
- Timer(String tName)
Konstruktor dodany dopiero w wersji J2SE 5, umożliwia określenie nazwy wątku.
- Timer(String tName, boolean tThread)
Konstruktor dodany dopiero w wersji J2SE 5, umożliwia określenie nazwy wątku i jeśli argument tThread ma wartość true, wykorzystany zostanie dodatkowy wątek demona.
Do planowania zadania służą metody schedule i scheduleAtFixedRate:
- schedule(TimerTask TT, long wait)
Argument TT jest naszym zadaniem, a argument wait to czas uruchomienia zadania liczony w milisekundach od uruchomienia programu.
- schedule(TimerTask TT, long wait, long repeat)
Argument TT jest naszym zadaniem, argument wait to czas uruchomienia zadania liczony w milisekundach od uruchomienia programu, a argument repeat to czas w którym będzie powtarzany wątek liczony w milisekundach.
- schedule(TimerTask TT, Date data)
Argument TT jest naszym zadaniem, a argument data jest obiektem klasy Date, służącym do wyznaczenia dokładnego czasu uruchomienia zadania.
- schedule(TimerTask TT, Date data, long repeat)
Argument TT jest naszym zadaniem, argument data jest obiektem klasy Date, służącym do wyznaczenia dokładnego czasu uruchomienia zadania, a argument repeat to czas w którym będzie powtarzany wątek liczony w milisekundach.
- scheduleAtFixedRate(TimerTask TT, long wait, long repeat)
Argument TT jest naszym zadaniem, argument wait to czas uruchomienia zadania liczony w milisekundach od uruchomienia programu, a argument repeat to czas w którym będzie powtarzany wątek liczony w milisekundach, z tym że odstępy wykonywania wątku są uruchamianie względem pierwszego jego uruchomienia.
- scheduleAtFixedRate(TimerTask TT, Date data, long repeat)
Argument TT jest naszym zadaniem, argument data jest obiektem klasy Date, służącym do wyznaczenia dokładnego czasu uruchomienia zadania, a argument repeat to czas w którym będzie powtarzany wątek liczony w milisekundach, z tym że odstępy wykonywania wątku są uruchamianie względem pierwszego jego uruchomienia.
Teraz pora zastosować klasę Timer w praktyce.
Napiszemy aplet który po upływie jednej minuty zacznie migać:
import java.applet.*;
import java.awt.*;
import java.util.*;
public class TIMER extends Applet
{
static public Applet naszAplet;
public void init( )
{
Timer timer = new Timer( );
Zadanie zadanie = new Zadanie( );
timer.schedule(zadanie, 60000, 500);
naszAplet = this;
}
}
class Zadanie extends TimerTask
{
static boolean czerwony = true;
public void run( )
{
if(czerwony == true)
{
TIMER.naszAplet.setBackground(Color.red);
czerwony=false;
}
else
{
TIMER.naszAplet.setBackground(Color.yellow);
czerwony=true;
}
}
}
>Kliknij tutaj by skomentować, zgłosić błąd, lub uzupełnić tą część kursu.<
|
|