1. المفهوم
تستخدم وظيفة المهمة المجدولة المحددة بشكل أساسي كائن مؤقت في Java ، والذي يستخدم متعدد الخيوط داخليًا للمعالجة ، لذلك لا يزال مرتبطًا بالتكنولوجيا متعددة الخيوط. في JDK ، تكون فئة المؤقتة مسؤولة بشكل أساسي عن وظيفة مهام التخطيط ، أي بدء تنفيذ مهمة معينة في وقت محدد ، لكن الفصل الذي يلفت المهمة هو فئة TimerTask.
تخصيص المهمة التي سيتم تنفيذها عن طريق وراثة فئة TimerTask وتنفيذ طريقة Run ():
الفئة العامة myTask يمتد timertask {Override public void run () {dateFormat dateFormat = timeUtil.df.get () ؛ System.out.println ("مهمتي تعمل" + DateFormat.Format (New Date ())) ؛ }}قم بتشغيل المهمة في وقت التنفيذ عن طريق تنفيذ Timer.Schedule (مهمة TimerTask ، وقت التاريخ):
الطبقة العامة تشغيل {private static timer timer = new timer () ؛ يبرز الفراغ الثابت العام (سلسلة [] args) parseException {timer.schedule (new mytask () ، timeutil.df.get (). parse ("2017-09-14 09:19:30")) ؛ }}ملاحظة: فئة أداة تحويل الوقت تضمن سلامة الموضوع:
public class timeUtil {public static final threadlocal <dateformat> df = new threadlocal <dateFormat> () {Override DateFormat initialValue () {return new SimplEdateFormat ("yyyy-mm-dd hh: mm: ss: ss") ؛ }} ؛} 2. احتياطات فئة المؤقت
1. إنشاء كائن مؤقت يعني بدء تشغيل مؤشر ترابط جديد ، لكن مؤشر الترابط الذي بدأ حديثًا ليس موضوعًا خفيًا. لقد تم تشغيله في الخلفية. يمكن تعيين مؤشر ترابط المؤقت حديثًا كخيط خفي من خلال ما يلي.
مؤقت مؤقت ثابت = توقيت جديد (صحيح) ؛
2. مقدمًا: عندما يكون الوقت المخطط له في وقت مبكر من الوقت الحالي ، سيتم تشغيل المهمة على الفور.
3. التأخير: يتم تشغيل TimerTask واحدًا تلو الآخر في قائمة الانتظار ، وبالتالي قد لا يتماشى وقت التنفيذ مع الوقت الذي تتوقعه ، لأن المهمة السابقة قد تستغرق وقتًا طويلاً ، وسيتم تأخير وقت تشغيل المهمة اللاحقة. يعتمد وقت البدء المحدد للمهمة المتأخرة على "وقت النهاية" للمهمة السابقة.
4. العملية الدورية: Timer.Schedule (مهمة TimerTask ، التاريخ الأول ، الفترة الطويلة) بدءًا من الوقت الأول ، يتم تنفيذ المهام في كل ميلي ثانية من الفترة:
5. الجدول الزمني (مهمة TimerTask ، تأخير طويل) الوقت الحالي هو الوقت المرجعي. بعد تأخير العدد المحدد من المللي ثانية في هذا الوقت ، يتم تنفيذ مهمة TimerTask.
6. الجدول الزمني (مهمة TimerTask ، تأخير طويل ، فترة طويلة) الوقت الحالي هو الوقت المرجعي. على هذا الأساس ، تأخير العدد المحدد من المللي ثانية ، ثم تنفيذ مهمة مع عدد لا حصر له من المرات في فاصل معين.
7. ما هو الفرق بين DITER's Cancel () و Timertask's Cancel ()؟
يتم تنفيذ تنفيذ المهام المذكورة سابقًا واحدًا تلو الآخر في شكل أعمدة. يشير TimerTask.cancel () إلى إلغاء المهمة الحالية من المهمة إلى العمود. قيمة Timer.cancel () هي إلغاء جميع المهام في قائمة انتظار المهمة الحالية. تجدر الإشارة إلى أن إلغاء المؤقت () في بعض الأحيان لا يتوقف بالضرورة عن تنفيذ المهام المخططة ، ولكنه ينفذها بشكل طبيعي. وذلك لأن طريقة إلغاء () في فئة المؤقت في بعض الأحيان لا تتنافس على قفل قائمة الانتظار ، وبالتالي لا تزال المهام في فئة TimerTask يتم تنفيذها بشكل طبيعي.
3. الفرق بين ScheduleAtFixedRate (مهمة TimerTask ، التاريخ الأول ، الفترة الطويلة) والجدول الزمني (Timertask Task ، Date First Time ، Pener
أوجه التشابه:
1. يتم تنفيذ جدول الأسلوب وجدولة MethoduleAtfixedrate بالترتيب ، لذلك لا توجد حاجة لمواقف السلامة غير المطلوبة.
2. جدول الأسلوب وطريقة ScheduleAtFixedRate إذا لم يتم تأخير وقت تنفيذ المهمة ، فسيتم حساب وقت تنفيذ المهمة التالية بناءً على الوقت في "البداية" للمهمة السابقة.
3. جدول الأسلوب والطريقة ScheduleAtFixedRate إذا تم تأخير وقت تنفيذ المهمة ، يتم حساب وقت تنفيذ المهمة التالية من خلال الإشارة إلى الوقت في نهاية المهمة الأخيرة.
الاختلافات:
لا يوجد فرق في الأساس بين جدول الأسلوب وجدولة الأسلوب قيد الاستخدام ، أي أن ScheduleAtFixedRate لديه تنفيذ اللحاق بالركب. ماذا يعني ذلك؟ أي إذا تم مقاطعة المهمة أثناء التشغيل الدوري ، فسيحاول ScheduleAtfixedrate ملء المهام التي تم إسقاطها مسبقًا. ويتم تجاهل الجدول الزمني ، ثم تشغيل المهمة التالية. يمكنك الرجوع إلى هذه المدونة ، التي يتم كتابتها بوضوح.
ما سبق هو كل محتوى هذه المقالة. آمل أن يكون ذلك مفيدًا لتعلم الجميع وآمل أن يدعم الجميع wulin.com أكثر.