1. แนวคิด
ฟังก์ชั่นงานที่กำหนดเวลาเวลาส่วนใหญ่ใช้วัตถุตัวจับเวลาใน Java ซึ่งใช้มัลติเธรดภายในสำหรับการประมวลผลดังนั้นจึงยังคงเกี่ยวข้องกับเทคโนโลยีมัลติเธรด ใน JDK คลาสตัวจับเวลาส่วนใหญ่รับผิดชอบต่อการทำงานของงานการวางแผนนั่นคือเริ่มที่จะดำเนินงานบางอย่างในเวลาที่กำหนด แต่คลาสที่ห่อหุ้มงานคือคลาส Timertask
ปรับแต่งงานที่จะดำเนินการโดยสืบทอดคลาส TimerTask และใช้วิธีการเรียกใช้ ():
คลาสสาธารณะ MyTask ขยาย TimerTask {@Override โมฆะสาธารณะ Run () {วันที่ DateFormat DateFormat = timeUtil.df.get (); System.out.println ("งานของฉันกำลังทำงาน" + dateformat.format (วันที่ใหม่ ())); -รันงานตามเวลาดำเนินการโดยดำเนินการ timer.schedule (งาน TimerTask เวลาวันที่):
การเรียกใช้คลาสสาธารณะ {ตัวจับเวลาแบบคงที่ส่วนตัว = ตัวจับเวลาใหม่ (); โมฆะคงที่สาธารณะหลัก (สตริง [] args) พ่น parseexception {timer.schedule (ใหม่ mytask (), timeutil.df.get (). parse ("2017-09-14 09:19:30")); -หมายเหตุ: คลาสเครื่องมือการแปลงเวลาทำให้มั่นใจในความปลอดภัยของเธรด:
Public Class TimeUtil {Public Static Final ThreadLocal <DateFormat> DF = ใหม่ ThreadLocal <DateFormat> () {@Override Protected DateFormat InitialValue () {ส่งคืนใหม่ SimpleDateFormat ("YYYY-MM-DD HH: MM: SS"); - 2. ข้อควรระวังในชั้นเรียนจับเวลา
1. การสร้างวัตถุตัวจับเวลาหมายถึงเธรดใหม่เริ่มต้นขึ้น แต่เธรดที่เริ่มต้นใหม่ไม่ใช่เธรด daemon มันทำงานในพื้นหลัง เธรดจับเวลาที่เพิ่งเริ่มต้นใหม่สามารถตั้งค่าเป็นเธรด daemon ผ่านต่อไปนี้
ตัวจับเวลาแบบคงที่ส่วนตัว = ตัวจับเวลาใหม่ (จริง);
2. ล่วงหน้า: เมื่อเวลาที่วางแผนไว้เร็วกว่าเวลาปัจจุบันงานจะทำงานทันที
3. ความล่าช้า: Timertask ทำงานทีละคนในคิวดังนั้นเวลาดำเนินการอาจไม่สอดคล้องกับเวลาที่คุณคาดหวังเนื่องจากงานก่อนหน้านี้อาจใช้เวลานานและเวลาทำงานของงานที่ตามมาจะล่าช้า เวลาเริ่มต้นที่เฉพาะเจาะจงของงานล่าช้าขึ้นอยู่กับ "เวลาสิ้นสุด" ของงานก่อนหน้า
4. การดำเนินการเป็นระยะ: timer.schedule (งาน Timertask, วันที่ครั้งแรก, ระยะเวลานาน) เริ่มตั้งแต่ครั้งแรกงานจะดำเนินการทุกมิลลิวินาทีของระยะเวลา:
5. กำหนดการ (งาน TimerTask ล่าช้านาน) เวลาปัจจุบันคือเวลาอ้างอิง หลังจากล่าช้าจำนวนมิลลิวินาทีในเวลานี้งาน TimerTask จะถูกดำเนินการ
6. กำหนดเวลา (งาน TimerTask ล่าช้าระยะยาว) เวลาปัจจุบันคือเวลาอ้างอิง บนพื้นฐานนี้ล่าช้าจำนวนชุดมิลลิวินาทีจากนั้นดำเนินงานที่มีจำนวนครั้งที่ไม่มีที่สิ้นสุดในช่วงเวลาหนึ่ง
7. ความแตกต่างระหว่างตัวจับเวลาของ Cancel () และ Timertask's Cancel () คืออะไร?
การดำเนินงานที่กล่าวถึงก่อนหน้านี้จะดำเนินการทีละหนึ่งในรูปแบบของคอลัมน์ timertask.cancel () หมายถึงการยกเลิกงานปัจจุบันจากงานกับคอลัมน์ ค่าของ timer.cancel () คือการยกเลิกงานทั้งหมดในคิวงานปัจจุบัน เป็นที่น่าสังเกตว่า การยกเลิกของตัวจับเวลา () บางครั้งไม่จำเป็นต้องหยุดทำงานตามแผน แต่ดำเนินการตามปกติ นี่เป็นเพราะเมธอด cancel () ในคลาสจับเวลาบางครั้งไม่ได้แข่งขันเพื่อล็อคคิวดังนั้นงานในคลาส Timertask จะดำเนินการต่อไปตามปกติ
3. ความแตกต่างระหว่าง ScheduleatFixedrate (งาน TimerTask, วันที่ครั้งแรก, ระยะเวลานาน) และกำหนดเวลา (งาน TimerTask, วันที่ครั้งแรก, ระยะเวลานาน)
ความคล้ายคลึงกัน:
1. กำหนดการวิธีการและวิธีการกำหนดตารางเวลา fixedrate จะถูกดำเนินการตามลำดับดังนั้นจึงไม่จำเป็นต้องใช้สถานการณ์ความปลอดภัยที่ไม่ได้เธรด
2. กำหนดเวลาวิธีการและวิธีการกำหนดเวลา fixedrate หากเวลาของการดำเนินการงานไม่ล่าช้าดังนั้นเวลาดำเนินการของงานถัดไปจะถูกคำนวณตามเวลาที่ "เริ่ม" ของงานก่อนหน้า
3. กำหนดเวลาวิธีการและวิธีการกำหนดเวลา fixedrate หากเวลาสำหรับการดำเนินการงานล่าช้าเวลาดำเนินการของงานถัดไปจะคำนวณโดยอ้างอิงถึงเวลาในตอนท้ายของงานสุดท้าย
ความแตกต่าง:
โดยพื้นฐานแล้วไม่มีความแตกต่างระหว่างกำหนดการวิธีการและวิธีการกำหนดเวลาการใช้งานที่ใช้งานนั่นคือ ScheduleatFixedrate มีการดำเนินการตามการดำเนินการ หมายความว่าอย่างไร? นั่นคือหากงานถูกขัดจังหวะในระหว่างการดำเนินการเป็นระยะ scheduleatfixedrate จะพยายามเติมงานที่ลดลงก่อนหน้านี้ และกำหนดการจะถูกละเว้นจากนั้นเรียกใช้งานถัดไป คุณสามารถอ้างถึงบล็อกนี้ซึ่งเขียนขึ้นอย่างชัดเจน
ข้างต้นเป็นเนื้อหาทั้งหมดของบทความนี้ ฉันหวังว่ามันจะเป็นประโยชน์ต่อการเรียนรู้ของทุกคนและฉันหวังว่าทุกคนจะสนับสนุน wulin.com มากขึ้น