ملاحظة المترجم: أنا شخصياً أعتقد أن استخدام المهام الموقوتة لتشغيل مجموعة القمامة ليس مثالاً جيدًا. البيانات ، والملفات ، إلخ.
في هذه المقالة ، سأقدم 3 طرق تنفيذ مختلفة:
1. تنفيذ الخيط العادي
2. تنفيذ TimerTask
3. تنفيذ SchedudexecutorService
1. الموضوع العادي
هذا هو الشيء الأكثر شيوعًا. يمكن تنفيذ ذلك بسرعة وسهولة ، الرمز هو كما يلي:
نسخة الكود كما يلي:
فئة عامة Task1 {
الفراغ الثابت العام الرئيسي (سلسلة [] args) {
// ركض في الثانية
فترة طويلة طويلة interval = 1000 ؛
RunNable Runnable = جديد RunNable () {
تشغيل الفراغ العام () {
بينما (صحيح) {
// -------- رمز المهمة لتشغيله
System.out.println ("Hello !!") ؛
// ---------- ينتهي هنا
يحاول {
thread.sleep (timeInterval) ؛
} catch (InterruptedException e) {
E.PrintStackTrace () ؛
}
}
}
} ؛
موضوع الموضوع = مؤشر ترابط جديد (Runnable) ؛
thread.start () ؛
}
}
2. استخدم المؤقت و timertask
التنفيذ أعلاه سريع وسهل للغاية ، لكنه يفتقر أيضًا إلى بعض الوظائف.
بالمقارنة مع الطريقة أعلاه ، فإن استخدام Timer و TimerTask له الفوائد التالية:
1. يتم التحكم فيه عند بدء المهام وإلغاءها
2. يمكنك تحديد وقت التأخير الذي تريده عند تنفيذ مهمة للمرة الأولى
أثناء التنفيذ ، يمكن لفئة الموقت جدولة المهام ، وتنفيذ TimerTask مهام محددة في طريقة Run ().
يمكن لحالات المؤقت جدولة تعدد المهام ، وهي آمنة للموضوع.
عندما يتم استدعاء مُنشئ المؤقت ، فإنه ينشئ مؤشر ترابط يمكن استخدامه لجدولة المهام.
ها هو الرمز:
نسخة الكود كما يلي:
استيراد java.util.timer ؛
استيراد java.util.timertask ؛
فئة عامة Task2 {
الفراغ الثابت العام الرئيسي (سلسلة [] args) {
TimerTask Task = New TimerTask () {
@تجاوز
تشغيل الفراغ العام () {
// مهمة الجري تذهب هنا
System.out.println ("Hello !!!") ؛
}
} ؛
Timer Timer = New Timer () ؛
تأخير طويل = 0 ؛
فترة طويلة = 1 * 1000 ؛
// جدولة المهمة التي سيتم تشغيلها في فاصل زمني
Timer.ScheduleAtfixedrate (المهمة ، التأخير ،
عدد صحيح) ؛
} // نهاية الرئيسية
}
هذه الفصول موجودة منذ JDK 1.3.
3. Schedudexecutorservice
تم تقديم SignedExecutorService كفئة أدوات متزامنة من Java SE 5 Java.Util.Concurrent ، وهي طريقة تنفيذ المهام الأكثر مثالية.
بالمقارنة مع الطريقتين أعلاه ، فإن لديها الفوائد التالية:
1. مقارنة مع موضوع الموقت المفرد ، فإنه ينفذ المهام من خلال تجمع مؤشرات الترابط.
2. يمكنك ضبط وقت التأخير لتنفيذ المهمة الأولى
3. تقديم اتفاقيات جيدة لتعيين الفاصل الزمني للتنفيذ
فيما يلي رمز التنفيذ.
نسخة الكود كما يلي:
استيراد java.util.concurrent.executors ؛
استيراد java.util.concurrent.scheduledexecutorservice ؛
استيراد java.util.concurrent.timeunit ؛
فئة عامة Task3 {
الفراغ الثابت العام الرئيسي (سلسلة [] args) {
RunNable Runnable = جديد RunNable () {
تشغيل الفراغ العام () {
// مهمة الجري تذهب هنا
System.out.println ("Hello !!") ؛
}
} ؛
خدمة SchedeDexecutorService = منفذين المنفذين
.newsinglethreadscheduledexecutor () ؛
service.ScheDuleAtfixedrate (Runnable ، 0 ، 1 ، timeUnit.Seconds) ؛
}
}