1 // Copyright 2008 The Android Open Source Project 2 3 4 /* 5 * Throw an exception from a finalizer and make sure it's harmless. Under 6 * Dalvik this may also generate a warning in the log file. 7 */ 8 public class Main { 9 static Object waiter = new Object(); 10 static volatile boolean didFinal = false; 11 createAndForget()12 static void createAndForget() { 13 Main main = new Main(); 14 } 15 main(String[] args)16 public static void main(String[] args) { 17 createAndForget(); 18 19 System.gc(); 20 System.runFinalization(); 21 22 while (!didFinal) { 23 try { 24 Thread.sleep(500); 25 } catch (InterruptedException ie) { 26 System.err.println(ie); 27 } 28 } 29 30 /* give it a chance to cause mayhem */ 31 try { 32 Thread.sleep(750); 33 } catch (InterruptedException ie) { 34 System.err.println(ie); 35 } 36 37 System.out.println("done"); 38 } 39 finalize()40 protected void finalize() throws Throwable { 41 System.out.println("In finalizer"); 42 43 didFinal = true; 44 45 throw new InterruptedException("whee"); 46 } 47 } 48 49