Timer memiliki dua mode untuk menjalankan tugas. Yang paling umum digunakan adalah jadwal, yang dapat menjalankan tugas dengan dua cara: 1: pada waktu tertentu (Data), 2: setelah waktu tertentu (int penundaan). frekuensi pelaksanaan tugas dengan salah satu cara berikut. Mari kita lihat contoh sederhana:
Copy kode kodenya sebagai berikut:
impor java.io.IOException;
impor java.util.Timer;
Tes Timer kelas publik {
public static void main(String[] args){
Pengatur waktu = Pengatur Waktu baru();
timer.schedule(new MyTask(), 1000, 2000); //Jalankan tugas ini setelah 1 detik, dengan interval 2 detik setiap kali. Jika Anda meneruskan parameter Data, Anda dapat menjalankan tugas ini pada waktu yang tetap.
while(true){//Ini digunakan untuk menghentikan tugas ini, jika tidak maka tugas ini akan terus dijalankan dalam satu lingkaran
mencoba {
int ch = Sistem.di.baca();
jika(ch-'c'==0){
timer.cancel();//Gunakan metode ini untuk keluar dari tugas
}
} tangkapan (IOException e) {
// TODO Blok tangkapan yang dibuat secara otomatis
e.printStackTrace();
}
}
}
kelas statis MyTask memperluas java.util.TimerTask{
@Mengesampingkan
menjalankan kekosongan publik() {
// TODO Stub metode yang dibuat secara otomatis
Sistem.keluar.println("________");
}
}
}
Jika Anda menggunakan JDK 5+, tersedia juga mode scheduleAtFixedRate. Dalam mode ini, Timer akan mencoba yang terbaik untuk menjalankan tugas pada frekuensi tetap frekuensi tetap. Setelah 1 detik, itu akan dieksekusi setiap dua detik. Namun, karena java tidak real-time (pada kenyataannya, kinerja java real-time sangat buruk...), arti asli yang kami ungkapkan di program sebelumnya tidak dapat dieksekusi secara ketat. Jika kita memanggil scheduleAtFixedRate, maka Timer akan mencoba menjaga frekuensi eksekusi Tugas Anda setiap 2 detik. Jalankan program di atas, dengan asumsi bahwa scheduleAtFixedRate digunakan, maka skenario berikut mungkin terjadi: Setelah 1 detik, MyTask. Dieksekusi satu kali, karena sistem sedang sibuk, MyTask dapat dijalankan untuk kedua kalinya setelah 2,5 detik. Kemudian, Timer mencatat penundaan ini dan mencoba mengganti penundaan ini pada tugas berikutnya. Tiga kali. "Jalankan tugas pada frekuensi tetap, bukan pada waktu tunda tetap"
Berikut adalah contoh yang lebih rumit, yang memberi tahu Anda cara keluar dari satu TimerTask dan cara keluar dari semua Tugas.
Copy kode kodenya sebagai berikut:
paket MyTimerTest;
impor java.io.IOException;
impor java.util.Timer;
/*
* Kelas ini memberikan metode utama penggunaan Timer dan TimerTaske, termasuk menyesuaikan tugas dan menambahkan tugas
* Keluar dari tugas dan keluar dari pengatur waktu.
* Karena kolom status TimerTask dapat diakses pada tingkat paket, tidak ada cara untuk mengaksesnya di luar paket java.util.
* Mendapatkan statusnya, yang menyebabkan ketidaknyamanan pada pemrograman. Kami tidak dapat menilai status Tugas tertentu.
*
*/
Tes Timer kelas publik {
public static void main(String[] args) {
Pengatur waktu = Pengatur Waktu baru();
Tugas Saya myTask1 = Tugas Saya baru();
Tugas Saya myTask2 = Tugas Saya baru();
myTask2.setInfo("MyTask-2");
pengatur waktu.jadwal(Tugasku1, 1000, 2000);
timer.scheduleAtFixedRate(myTask2, 2000, 3000);
sementara (benar) {
mencoba {
byte[] info = byte baru[1024];
int len = Sistem.di.baca(info);
String strInfo = new String(info, 0, len, "GBK");//Baca informasi dari konsol
if (strInfo.charAt(strInfo.length() - 1) == ' ') {
strInfo = strInfo.substring(0, strInfo.panjang() - 2);
}
if (strInfo.startsWith("Cancel-1")) { myTask1.cancel();//Keluar dari satu tugas
//Sebenarnya di sini harus dinilai apakah myTask2 juga sudah keluar. Jika demikian, itu harusnya rusak
//Status myTask2, jadi tidak ada penilaian yang dapat dibuat di sini apakah akan keluar dari loop.
} else if (strInfo.startsWith("Batal-2")) {
tugasku2.batal();
} else if (strInfo.startsWith("Batal-Semua")) {
timer.cancel();//Keluar dari Timer
merusak;
} kalau tidak {
// Hanya membuat penilaian pada myTask1, bermalas-malasan ^_^
myTask1.setInfo(strInfo);
}
} catch (IOException e) { // TODO Blok tangkapan yang dibuat secara otomatis
e.printStackTrace();
}
}
}
kelas statis MyTask memperluas java.util.TimerTask {
String info = "^_^";
@Mengesampingkan
menjalankan kekosongan publik() {
// TODO Stub metode yang dibuat secara otomatis
Sistem.keluar.println(info);
}
String publik getInfo() {
informasi pengembalian;
}
public void setInfo(Info string) {
this.info = info;
}
}
}