|
||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||
MainUncooperative | Line # 10 | 19 | 0% | 5 | 25 | 0% |
0.0
|
|||||||||||||||||||||||||||||||||||||||||||||||||||||||
No Tests | |||
1 | package org.codehaus.mojo.exec; | |
2 | ||
3 | /** | |
4 | * Created by IntelliJ IDEA. | |
5 | * User: dsmiley | |
6 | * Date: Jan 19, 2007 | |
7 | * Time: 4:43:19 PM | |
8 | * To change this template use File | Settings | File Templates. | |
9 | */ | |
10 | public class MainUncooperative extends Thread | |
11 | { | |
12 | public static final String SUCCESS = "1(interrupted)(f)2(f)"; | |
13 | ||
14 | 0 | public static void main( String[] args ) |
15 | throws InterruptedException | |
16 | { | |
17 | 0 | Thread daemonThread = new MainUncooperative(); |
18 | 0 | daemonThread.setDaemon( true ); |
19 | 0 | daemonThread.start(); |
20 | 0 | Thread.sleep( 1000 ); |
21 | //returns to caller now | |
22 | } | |
23 | ||
24 | final long SIMWORKTIME = 15*1000;//15 seconds of work which is going to be more than exec:java wants to wait | |
25 | ||
26 | 0 | public void run() |
27 | { | |
28 | 0 | boolean interruptedOnce = false; |
29 | 0 | long startedTime = System.currentTimeMillis(); |
30 | 0 | for(int lap = 1; true; lap++ ) |
31 | { | |
32 | 0 | long remainingWork = SIMWORKTIME - (System.currentTimeMillis() - startedTime); |
33 | 0 | if ( remainingWork <= 0 ) |
34 | { | |
35 | 0 | break;//done |
36 | } | |
37 | 0 | try |
38 | { | |
39 | 0 | System.out.print( lap ); |
40 | 0 | Thread.sleep(remainingWork);//simulates doing work |
41 | 0 | System.out.print( "(done)" ); |
42 | 0 | break; |
43 | } | |
44 | catch ( InterruptedException e ) | |
45 | { | |
46 | //We want to ensure this only gets reported once. It's possible depending on a race condition for | |
47 | // ExecJavaMojo.terminateThreads() to interrupt this thread a second time. | |
48 | 0 | if ( ! interruptedOnce ) |
49 | { | |
50 | 0 | System.out.print( "(interrupted)" ); |
51 | } | |
52 | 0 | interruptedOnce = true; |
53 | ||
54 | //be uncooperative; don't quit and don't set interrupted status | |
55 | } | |
56 | finally | |
57 | { | |
58 | 0 | System.out.print("(f)");//we should see this if Thread.stop() is called |
59 | } | |
60 | } | |
61 | } | |
62 | } |
|