Computer >> บทช่วยสอนคอมพิวเตอร์ >  >> การเขียนโปรแกรม >> Java

การใช้งานคลาส Cleaner ใน Java 9

Cleaner Class คืออะไร?

Java 9 เพิ่ม java.lang.ref.Cleaner เป็นตัวเลือกแทน finalize() ที่ถูก deprecated จัดการ cleanup actions เมื่อ object ถูก garbage collect

วิธีการทำงาน

  1. สร้าง Cleaner instance ด้วย Cleaner.create()
  2. Register object พร้อม cleaning action (Runnable) ด้วย cleaner.register(obj, action)
  3. เมื่อ object กลายเป็น eligible สำหรับ GC -> cleaning action จะถูกเรียก

ตัวอย่าง

import java.lang.ref.Cleaner;

public class CleanerTest {
    public static void main(String args[]) {
        System.out.println("TutorialsPoint");
        Cleaner cleaner = Cleaner.create();
        if(true) {
            CleanerTest myObject = new CleanerTest();
            cleaner.register(myObject, new State()); // register cleaner
        }
        // สร้าง object มากๆ เพื่อกระตุ้น GC
        for(int i = 1; i <= 10000; i++) {
            String[] largeObject = new String[1000];
            try { Thread.sleep(1); } catch(InterruptedException e) { e.printStackTrace(); }
        }
    }
    private static class State implements Runnable {
        public void run() {
            System.out.print("Cleaning action");
        }
    }
}

Output

TutorialsPoint Cleaning action

ข้อดีของ Cleaner vs finalize()

  • แยก cleanup logic ออกจาก object (separation of concerns)
  • ควบคุม thread ของ cleanup ได้ (Cleaner ใช้ dedicated thread)
  • ไม่มีปัญหา finalization ordering และ resurrection
  • มีประสิทธิภาพและ predictable มากกว่า

สรุป

Cleaner ให้กลไกจัดการ resource cleanup ที่ทันสมัยและน่าเชื่อถือกว่า finalize() ควรใช้ใน Java 9+