1. Konsep
Fungsi tugas yang dijadwalkan waktunya terutama menggunakan objek timer di Java, yang menggunakan multi-threading secara internal untuk diproses, sehingga masih sangat terkait dengan teknologi multi-threading. Di JDK, kelas timer terutama bertanggung jawab atas fungsi tugas perencanaan, yaitu, mulai menjalankan tugas tertentu pada waktu yang ditentukan, tetapi kelas yang merangkum tugas adalah kelas Timertask.
Kustomisasi tugas yang akan dieksekusi dengan mewarisi kelas TimerTask dan mengimplementasikan metode run ():
kelas publik myTask memperluas timerKask {@Override public void run () {dateFormat dateFormat = timeutil.df.get (); System.out.println ("Tugas saya berjalan" + dateFormat.format (tanggal baru ())); }}Jalankan tugas pada waktu eksekusi dengan mengeksekusi timer.schedule (Tugas TimerTask, waktu tanggal):
kelas publik run {private static timer = timer baru (); public static void main (string [] args) melempar parseException {timer.schedule (myTask baru (), timeutil.df.get (). parse ("2017-09-14 09:19:30")); }}Catatan: Kelas alat konversi waktu memastikan keamanan utas:
Timeutil kelas publik {Public Static Final Threadlocal <DateFormat> df = ThreadLocal baru <DateFormat> () {@Override DateFormat InitialValue () {return new SimpleDateFormat ("yyyy-mm-dd hh: mm: ss"); }};} 2. Kelas Penghitung Waktu Tindakan Kelas
1. Membuat objek timer berarti utas baru dimulai, tetapi utas yang baru dimulai bukanlah utas daemon. Itu telah berjalan di latar belakang. Utas pengatur waktu yang baru dimulai dapat diatur sebagai benang daemon melalui yang berikut.
Pengatur Waktu Statis Pribadi = Timer Baru (TRUE);
2. Di muka: Ketika waktu yang direncanakan lebih awal dari waktu saat ini, tugas akan segera dijalankan.
3. Penundaan: Timertask dijalankan satu per satu dalam antrian, sehingga waktu eksekusi mungkin tidak konsisten dengan waktu yang Anda harapkan, karena tugas sebelumnya mungkin memakan waktu lama, dan waktu berjalan dari tugas berikutnya akan ditunda. Waktu mulai spesifik dari tugas yang tertunda didasarkan pada "waktu akhir" dari tugas sebelumnya.
4. Operasi Berkala: Timer.schedule (Tugas Timertask, Tanggal Pertama kali, Periode Panjang) Mulai dari pertama kali, tugas dieksekusi setiap milidetik periode:
5. Jadwal (Tugas TimerTask, Penundaan lama) Waktu saat ini adalah waktu referensi. Setelah menunda jumlah milidetik yang ditetapkan pada saat ini, tugas Timertask dieksekusi.
6. Jadwal (Tugas TimerTask, Penundaan Panjang, Periode Panjang) Waktu saat ini adalah waktu referensi. Atas dasar ini, tunda jumlah milidetik yang ditetapkan, dan kemudian jalankan tugas dengan jumlah tak terbatas pada interval tertentu.
7. Apa perbedaan antara Timer's Cancel () dan TimerSask's Cancel ()?
Eksekusi tugas yang disebutkan sebelumnya dieksekusi satu per satu dalam bentuk kolom. Timertask.cancel () mengacu pada membatalkan tugas saat ini dari tugas-ke-kolom. Nilai timer.cancel () adalah untuk membatalkan semua tugas dalam antrian tugas saat ini. Perlu dicatat bahwa Timer's Cancel () kadang -kadang tidak harus berhenti mengeksekusi tugas yang direncanakan, tetapi mengeksekusi mereka secara normal. Ini karena metode pembatalan () di kelas timer kadang -kadang tidak bersaing untuk kunci antrian, sehingga tugas -tugas di kelas Timertask terus dieksekusi secara normal.
3. Perbedaan antara jadwalFixEdrate (Tugas TimerTask, tanggal pertama kali, periode panjang) dan jadwal (tugas TimerTask, tanggal pertama kali, periode panjang)
Kesamaan:
1. Jadwal metode dan metode jadwalFixEdrate dijalankan secara berurutan, sehingga situasi keselamatan non-utas tidak diperlukan.
2. Jadwal metode dan metode penjadwalanFixedRate Jika waktu menjalankan tugas tidak tertunda, maka waktu eksekusi dari tugas berikutnya dihitung berdasarkan waktu pada "mulai" dari tugas sebelumnya.
3. Jadwal Metode dan Metode PenjadwalananFixedRate Jika waktu untuk melaksanakan tugas ditunda, waktu eksekusi dari tugas berikutnya dihitung dengan merujuk pada waktu pada akhir tugas terakhir.
Perbedaan:
Pada dasarnya tidak ada perbedaan antara Jadwal Metode dan Metode ScheduleAtFixedRate digunakan, yaitu, SCLEETFIXEDRATE memiliki eksekusi catch-up. Apa artinya? Artinya, jika tugas tersebut terganggu selama operasi berkala, penjadwalan FLEATEDRATE akan mencoba mengisi tugas yang sebelumnya dijatuhkan. Dan jadwal diabaikan, dan kemudian jalankan tugas berikutnya. Anda dapat merujuk ke blog ini, yang ditulis dengan jelas.
Di atas adalah semua konten artikel ini. Saya berharap ini akan membantu untuk pembelajaran semua orang dan saya harap semua orang akan lebih mendukung wulin.com.