package org.codehaus.mojo.exec;
/**
* Created by IntelliJ IDEA.
* User: dsmiley
* Date: Jan 19, 2007
* Time: 4:43:19 PM
* To change this template use File | Settings | File Templates.
*/
public class MainUncooperative extends Thread
{
public static final String SUCCESS = "1(interrupted)(f)2(f)";
public static void main( String[] args )
throws InterruptedException
{
Thread daemonThread = new MainUncooperative();
daemonThread.setDaemon( true );
daemonThread.start();
Thread.sleep( 1000 );
//returns to caller now
}
final long SIMWORKTIME = 15*1000;//15 seconds of work which is going to be more than exec:java wants to wait
public void run()
{
boolean interruptedOnce = false;
long startedTime = System.currentTimeMillis();
for(int lap = 1; true; lap++ )
{
long remainingWork = SIMWORKTIME - (System.currentTimeMillis() - startedTime);
if ( remainingWork <= 0 )
{
break;//done
}
try
{
System.out.print( lap );
Thread.sleep(remainingWork);//simulates doing work
System.out.print( "(done)" );
break;
}
catch ( InterruptedException e )
{
//We want to ensure this only gets reported once. It's possible depending on a race condition for
// ExecJavaMojo.terminateThreads() to interrupt this thread a second time.
if ( ! interruptedOnce )
{
System.out.print( "(interrupted)" );
}
interruptedOnce = true;
//be uncooperative; don't quit and don't set interrupted status
}
finally
{
System.out.print("(f)");//we should see this if Thread.stop() is called
}
}
}
}