public class SelfRun implements Runnable{ private Thread internalThread; private volatile boolean noStopRequested; public SelfRun() { System.out.println( "in constructor - initializing..." ); noStopRequested = true; internalThread = new Thread( this ); internalThread.start(); }
public static void main(String[] args) { SelfRun sr = new SelfRun(); try { Thread.sleep( 3000 ); }catch( InterruptedException x ) { } sr.stopRequest(); }
public void run() { if( Thread.currentThread()!=internalThread ) { throw new RuntimeException( "only the internal " + "thread is allowed to invoke run()" ); } while( noStopRequested ) { System.out.println( "in run() - still going..." ); try { Thread.sleep( 700 ); }catch( InterruptedException x ) { Thread.currentThread().interrupt(); } } } public void stopRequest() { noStopRequested = false; internalThread.interrupt(); } public boolean isAlive() { return internalThread.isAlive(); }}///
in constructor - initializing...in run() - still going...in run() - still going...in run() - still going...in run() - still going...in run() - still going...