2017-05-09 6 views
-2

Ich versuche, ein Thread-Tutorial zu implementieren, und das ist die Klasse, in der ich Thread-Klasse erweitert habe.Warum läuft mein Thread weiter?

package training; 

import java.text.DateFormat; 
import java.text.SimpleDateFormat; 
import java.util.Date; 
import java.util.Locale; 

public class Threadtutorial extends Thread{ 
    Date now; 
    Locale place; 
    //int i; 

    public void run(){ 
     int i=0; 
     while(i<1){ 
     now = new Date(); 
     place = new Locale("en"); 
     //timeFormatter t = new timeFormatter(); 
     SimpleDateFormat sdf = new SimpleDateFormat("yyyy-MM-dd HH:mm:ss.SSS"); 
     DateFormat d ; 
     DateFormat d2; 
     d=DateFormat.getDateInstance(DateFormat.SHORT, place); 
     d2=DateFormat.getTimeInstance(DateFormat.DEFAULT, place); 
     //String d2=d.format(now); 
     String ass=sdf.format(now); 
     String bas=d.format(now); 
     String css=d2.format(now); 

     //String bss=sdf.format(ass); 
     System.out.println("start"); 
     //System.out.println(ass); 
     System.out.println(bas); 
     System.out.println(css); 
     i--; 
     try { 
      Thread.sleep(2000); 
     } catch (InterruptedException e) { 
      // TODO Auto-generated catch block 
      e.printStackTrace(); 
     } 
    }} 

} 

und unten ist meine Klasse, die den Faden führt.

package training; 

public class Threadexecutor { 

    public static void main(String[] args) { 
     // TODO Auto-generated method stub 

     Threadtutorial t= new Threadtutorial(); 
     //for(int i=0;i<4;i++){ 
     t.start(); 
     Threadtutorial t2= new Threadtutorial(); 
     t2.start(); 


    //} 

    } 
} 

Jetzt, warum mein Thread läuft, warum kann ich Stop-Methode nicht verwenden?

+1

Sie haben 'while (i <1)' und 'i -'. Wenn also "i" bei 0 beginnt und eins davon subtrahiert, wird jede Iteration fortgesetzt, bis sie unterläuft. – quackenator

+0

Also ist es eine unendliche While-Schleife. Haben Sie versucht, interrupt() von einem anderen Thread aufzurufen? Das wird "it. –

+0

Ich würde es nicht unendlich nennen. Sobald" i "um -2^31 dekrementiert ist, sollte es zu (2^31) -1 unterschreiten. Dies wäre größer als' 1' und beendet die Schleife Sie müssen nur auf mehr als 2 Milliarden Iterationen dieser Schleife warten – quackenator

Antwort

1
while(i<1) 

Sie Erniedrigen i so ist while unendlich

i--; 
+0

oh Gott, ich bin sicher, das muss die dümmste Frage in der Geschichte des Stackoverflow sein –

1

Weil Sie nur Erniedrigen die Variable i. Es ist immer kleiner als 1. Auf diese Weise haben Sie eine Endlosschleife.