OSDN Git Service

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