2016-09-06 8 views
0

Ich bin neu für Java, ich möchte Thread kontinuierlich vor dem laufen, ich möchte überprüfen, ob der gleiche Thread bereits bedeutet, zu stoppen und wieder zu laufen. Bitte, bitte hilf mir!Wie Thread kontinuierlich in Java laufen

Hier mein Code:

public class TripTrackService { 

    private static class TripThread implements Runnable { 
     private final Thread t; 

     TripThread() { 
      t = new Thread(); 
      t.setName("hello"); 
     } 
     public void start() { 
      if(!t.isAlive()) 
      { 
       t.start(); 
      System.out.println(t.getName()+ " Running....."+t.isAlive()); 
      Thread th = getThreadByName("hello"); 
       if(th!=null) 
       System.out.println(th.getName()+"Already Running....."+th.isAlive()); 
       else 
        System.out.println("No thread Found"); 
      } 
      else{ 
       System.out.println("Already Running....."); 
       Thread th = getThreadByName("test"); 
       if(th!=null){ 
        System.out.println(th.getName()+"Else Already Running....."+th.isAlive()); 
        th.interrupt(); 
       }    
       else{ 
        System.out.println("No thread Found"); 
       }      
      }    
     } 
     public void stop() { 
      if(t.isAlive()) 
      t.stop();   
     } 
     public void run() { 
      if(!t.isAlive()) 
      t.run();        
     } 
     public Thread getThreadByName(String threadName){ 
      Thread _tmp = null; 
      Set<Thread> threadSet = Thread.getAllStackTraces().keySet(); 
      Thread[] array = threadSet.toArray(new Thread[threadSet.size()]); 
      for(int i=0;i<array.length;i++){ 
       // System.out.println(array[i].getName()); 
       if(array[i].getName().equals(threadName)){ 
        _tmp=array[i]; 
       } 
      } 
      return _tmp; 
     }  
    } 

    public static void main(String args[]) {   
     TripThread myThread = new TripThread(); 
     myThread.start(); 
    } 
} 

Vielen Dank im Voraus .....

+0

Also, was ist das Problem mit Ihrem aktuellen Code? –

+0

Sein nicht kontinuierlich abgetan Drucken ... – hikoo

+1

sollten Sie Ihre Logik in der 'run()' Methode und starten Sie den Thread schreiben 'durch den Aufruf' Thread.start(), die die 'run()' Methode asynchron rufen. Trotzdem verstehe ich nicht, was Sie hier versuchen wollen. –

Antwort

0

hier Ihr Thema t keinen Job hat zu tun, so dass es nur zuweisen, indem Sie Ihren Konstruktor wie folgt zu ändern (durch Überschreiben der Run-Methode).

ThreadBehaviour() { 
     t = new Thread(){ 

      @Override 
      public void run() { 
       // TODO Auto-generated method stub 
       while (!Thread.currentThread().isInterrupted()) { 
        try { 
         System.out.println("running"); 
        } catch (Exception ex) { 
         Thread.currentThread().interrupt(); 
        } 
       } 
      } 
     }; 
     t.setName("hello"); 

    } 
0

Wie in dem genannten Kommentar gefordert, sollte ein Beispiel-Thread wie folgt aussehen.

public class SampleThreadRunner 
{ 
    public static void main(String [] args){ 
     SampleThread sampleThread1 = new SampleThread("Thread1"); 
     SampleThread sampleThread2 = new SampleThread("Thread2"); 
     Thread thread1 = new Thread(sampleThread1); 
     Thread thread2 = new Thread(sampleThread2); 
     thread1.start(); 
     thread2.start(); 
    } 
} 

class SampleThread implements Runnable{ 

    private String threadName; 
    private int counter; 

    public SampleThread(String threadName){ 
     this.threadName = threadName; 
    } 
    public void run() 
    { 
     while(counter < 1000){ 
      System.out.println("Printing " + threadName + " Count: " + counter++);  
     } 

    } 
} 

Oder wie die vorherige Antwort.

P. S: Haben nicht die Zeit hatte ein Git-Repo zu erstellen, eine Probe zu verknüpfen, wird wahrscheinlich so um Abend tun.

Verwandte Themen