Java/Threads/Template

Материал из Java эксперт
Перейти к: навигация, поиск

Inner self run threads

   <source lang="java">

public class InnerSelfRunMain extends Object {

 private Thread internalThread;
 private volatile boolean noStopRequested;
 public InnerSelfRunMain() {
   // add your code here ...
   System.out.println("initializing...");
   noStopRequested = true;
   Runnable r = new Runnable() {
     public void run() {
       try {
         runWork();
       } catch (Exception x) {
         // in case ANY exception slips through
         x.printStackTrace();
       }
     }
   };
   internalThread = new Thread(r);
   internalThread.start();
 }
 private void runWork() {
   while (noStopRequested) {
     System.out.println("in runWork() - still going...");
     try {
       Thread.sleep(700);
     } catch (InterruptedException x) {
       Thread.currentThread().interrupt(); // re-assert interrupt
     }
   }
 }
 public void stopRequest() {
   noStopRequested = false;
   internalThread.interrupt();
 }
 public boolean isAlive() {
   return internalThread.isAlive();
 }
 public static void main(String[] args) {
   InnerSelfRunMain sr = new InnerSelfRunMain();
   try {
     Thread.sleep(3000);
   } catch (InterruptedException x) {
   }
   sr.stopRequest();
 }

}

      </source>
   
  
 
  



Self run thread

   <source lang="java">

public class SelfRunThreadTemplate extends Object implements Runnable {

 private Thread internalThread;
 private volatile boolean noStopRequested;
 public SelfRunThreadTemplate() {
   // add your code here ...
   System.out.println("initializing...");
   noStopRequested = true;
   internalThread = new Thread(this);
   internalThread.start();
 }
 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();
 }
 public static void main(String[] args) {
   SelfRunThreadTemplate sr = new SelfRunThreadTemplate();
   try { Thread.sleep(3000); } catch ( InterruptedException x ) { }
   sr.stopRequest();
 }

}


      </source>