Advertisement
Not a member of Pastebin yet?
Sign Up,
it unlocks many cool features!
- public class DeathNotificationObject {
- private static ReferenceQueue<DeathNotificationObject>
- refQueue = new ReferenceQueue<DeathNotificationObject>();
- static {
- Thread deathThread = new Thread("Death notification") {
- @Override
- public void run() {
- try {
- while (true) {
- refQueue.remove();
- System.out.println("I'm dying!");
- }
- } catch (Throwable t) {
- t.printStackTrace();
- }
- }
- };
- deathThread.setDaemon(true);
- deathThread.start();
- }
- public DeathNotificationObject() {
- System.out.println("I'm born.");
- new PhantomReference<DeathNotificationObject>(this, refQueue);
- }
- public static void main(String[] args) {
- for (int i = 0 ; i < 10 ; i++) {
- new DeathNotificationObject();
- }
- try {
- System.gc();
- Thread.sleep(3000);
- } catch (InterruptedException e) {
- e.printStackTrace();
- }
- }
- }
- I'm born.
- I'm born.
- I'm born.
- I'm born.
- I'm born.
- I'm born.
- I'm born.
- I'm born.
- I'm born.
- I'm born.
- public class ElementCachedImage {
- private static Map<PhantomReference<ElementCachedImage>, File>
- refMap = new HashMap<PhantomReference<ElementCachedImage>, File>();
- private static ReferenceQueue<ElementCachedImage>
- refQue = new ReferenceQueue<ElementCachedImage>();
- static {
- Thread cleanUpThread = new Thread("Image Temporary Files cleanup") {
- @Override
- public void run() {
- try {
- while (true) {
- Reference<? extends ElementCachedImage> phanRef =
- refQue.remove();
- File f = refMap.remove(phanRef);
- Calendar c = Calendar.getInstance();
- c.setTimeInMillis(f.lastModified());
- _log.debug("Deleting unused file: " + f + " created at " + c.getTime());
- f.delete();
- }
- } catch (Throwable t) {
- _log.error(t);
- }
- }
- };
- cleanUpThread.setDaemon(true);
- cleanUpThread.start();
- }
- ImageWrapper img = null;
- private static Logger _log = Logger.getLogger(ElementCachedImage.class);
- public boolean copyToFile(File dest) {
- try {
- FileUtils.copyFile(img.getFile(), dest);
- } catch (IOException e) {
- _log.error(e);
- return false;
- }
- return true;
- }
- public ElementCachedImage(BufferedImage bi) {
- if (bi == null) throw new NullPointerException();
- img = new ImageWrapper(bi);
- PhantomReference<ElementCachedImage> pref =
- new PhantomReference<ElementCachedImage>(this, refQue);
- refMap.put(pref, img.getFile());
- new Thread("Save image to file") {
- @Override
- public void run() {
- synchronized(ElementCachedImage.this) {
- if (img != null) {
- img.saveToFile();
- img.getFile().deleteOnExit();
- }
- }
- }
- }.start();
- }
- }
- import java.lang.ref.PhantomReference;
- import java.lang.ref.Reference;
- import java.lang.ref.ReferenceQueue;
- import java.util.HashSet;
- import java.util.Set;
- public class DeathNotificationObject {
- private static ReferenceQueue<DeathNotificationObject> refQueue = new ReferenceQueue<DeathNotificationObject>();
- private static Set<Reference<DeathNotificationObject>> refs = new HashSet<>();
- static {
- Thread deathThread = new Thread("Death notification") {
- @Override
- public void run() {
- try {
- while (true) {
- Reference<? extends DeathNotificationObject> ref = refQueue.remove();
- refs.remove(ref);
- System.out.println("I'm dying!");
- }
- } catch (Throwable t) {
- t.printStackTrace();
- }
- }
- };
- deathThread.setDaemon(true);
- deathThread.start();
- }
- public DeathNotificationObject() {
- System.out.println("I'm born.");
- PhantomReference<DeathNotificationObject> ref = new PhantomReference<DeathNotificationObject>(this, refQueue);
- refs.add(ref);
- }
- public static void main(String[] args) {
- for (int i = 0 ; i < 10 ; i++) {
- new DeathNotificationObject();
- }
- try {
- System.gc();
- Thread.sleep(3000);
- } catch (InterruptedException e) {
- e.printStackTrace();
- }
- }
- }
- public DeathNotificationObject() {
- System.out.println("I'm born.");
- PhantomReference<DeathNotificationObject> ref = new PhantomReference<DeathNotificationObject>(this, refQueue);
- ref.enqueue();
- }
- public static void main(String[] args) throws InterruptedException {
- for (int i = 0 ; i < 5 ; i++) {
- DeathNotificationObject item = new DeathNotificationObject();
- System.out.println("working with item "+item);
- Thread.sleep(1000);
- System.out.println("stopped working with item "+item);
- // simulate release item
- item = null;
- }
- try {
- System.gc();
- Thread.sleep(3000);
- } catch (InterruptedException e) {
- e.printStackTrace();
- }
- }
- I'm born.
- I'm dying!
- working with item DeathNotificationObject@6908b095
- stopped working with item DeathNotificationObject@6908b095
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement