Java Timer, TimerTask, Reminder Class Tutorial พร้อมตัวอย่าง

เผยแพร่แล้ว: 2021-02-04
Java Timer, TimerTask, Reminder Class Tutorial พร้อมตัวอย่าง

java.util.Timer เป็นคลาสยูทิลิตี้ที่สามารถใช้เพื่อกำหนดเวลาเธรดที่จะดำเนินการในเวลาที่แน่นอนในอนาคต คลาส Java Timer สามารถใช้เพื่อกำหนดเวลางานให้รันครั้งเดียวหรือรันในช่วงเวลาปกติ

java.util.TimerTask เป็นคลาสนามธรรมที่ใช้อินเทอร์เฟซ Runnable และเราจำเป็นต้องขยายคลาสนี้เพื่อสร้าง TimerTask ของเราเองซึ่งสามารถกำหนดเวลาได้โดยใช้คลาส Java Timer

คลาสตัวจับเวลานั้นปลอดภัยสำหรับเธรดและหลายเธรดสามารถแชร์ออบเจ็กต์ Timer เดียวโดยไม่ต้องซิงโครไนซ์ภายนอก คลาสตัวจับเวลาใช้ java.util.TaskQueue เพื่อเพิ่มงานตามช่วงเวลาปกติและเมื่อใดก็ได้ อาจมีเธรดเดียวเท่านั้นที่รัน TimerTask ตัวอย่างเช่น หากคุณกำลังสร้างตัวจับเวลาให้ทำงานทุก 10 วินาที แต่การดำเนินการเธรดเดี่ยวจะใช้เวลา 20 วินาที จากนั้นวัตถุตัวจับเวลาจะเพิ่มงานไปยังคิวต่อไปและทันทีที่เธรดหนึ่งเสร็จสิ้น มันจะแจ้งคิวและเธรดอื่นจะเริ่มดำเนินการ

Java Timer Class

คลาสตัวจับเวลาใช้ Object wait และแจ้งเมธอดเพื่อกำหนดเวลางาน TimerTask เป็น abstract class และเราสืบทอดมาเพื่อให้การนำไปใช้อย่างเป็นรูปธรรม คลาส TimerTask implements interface Runnable ดังนั้นจึงเป็นเธรด ดังนั้นการใช้งาน TimerTask ของคุณจึงเป็นเธรดด้วย

ตัวอย่าง Timer and TimerTask ที่ง่ายมาก: งานจะดำเนินการเมื่อผ่านไป 5 seconds

ผลลัพธ์:

โปรแกรมอย่างง่ายนี้แสดงส่วนพื้นฐานต่อไปนี้ของการนำไปใช้และการจัดกำหนดการงานที่จะดำเนินการโดยเธรดตัวจับเวลา:

  • ใช้คลาสย่อยที่กำหนดเองของ TimerTask วิธีการ run ประกอบด้วยรหัสที่ทำงาน ในตัวอย่างนี้ คลาสย่อยชื่อ CrunchifyReminder
  • สร้างเธรดโดยสร้างอินสแตนซ์คลาส Timer
  • สร้างอินสแตนซ์ของวัตถุ TimerTask ( new CrunchifyReminder() )
  • กำหนดเวลางานตัวจับเวลาสำหรับการดำเนินการ

ฉันจะดำเนินการ TimerTask นี้ซ้ำ ๆ ได้อย่างไร

ผลลัพธ์:

ตามค่าเริ่มต้น โปรแกรมจะทำงานต่อไปตราบเท่าที่เธรดตัวจับเวลายังทำงานอยู่ คุณสามารถยุติเธรดตัวจับเวลาได้สี่วิธี:

  • เรียกใช้การ cancel บนตัวจับเวลา คุณสามารถทำสิ่งนี้ได้จากทุกที่ในโปรแกรม เช่น จากวิธีการ run ของงานตัวจับเวลา
  • ทำให้เธรดของตัวจับเวลาเป็น “daemon” โดยสร้างตัวจับเวลาดังนี้: new Timer(true) หากเธรดเดียวที่เหลืออยู่ในโปรแกรมคือเธรด daemon โปรแกรมจะออก
  • หลังจากที่งานตามกำหนดเวลาของตัวจับเวลาดำเนินการเสร็จสิ้นแล้ว ให้ลบการอ้างอิงทั้งหมดไปยังวัตถุตัว Timer ในที่สุด เธรดของตัวจับเวลาจะสิ้นสุดลง
  • เรียกใช้เมธอด System.exit ซึ่งจะทำให้โปรแกรมทั้งหมด (และเธรดทั้งหมด) ออกจากโปรแกรม