2013-04-11 71 views
1

我是初学者,开始学习java编程。螺纹Java代码问题

我写了一个程序来尝试线程。在一个类中,我编写了一个程序来显示数字从1到100,在另一个类中显示999到100之间的数字。现在主要我已经为类(r1,r2)创建了一个对象引用,并创建了一个对象为线程并传递(我的类的r1,r2对象引用)它们作为参数。现在我得到的输出结果并不像预期的那样,我觉得我的第二个线程没有被执行。我不确定我的逻辑或程序是否有问题。任何帮助/建议,将不胜感激。我的代码以供参考。

第1类:

public class Run implements Runnable { 

@Override 
public void run() { 

    for (int i = 0; i < 100; i++) { 
     try { 

      Thread.sleep(200); 
     } catch (InterruptedException ex) { 
      Logger.getLogger(Run.class.getName()).log(Level.SEVERE, "...", ex); 
     } 
     System.out.println(i); 
    } 
} 
} 

二级: 公共类RUN2扩展Thread {

public void run2() { 

    for(int i=999;i>0;i--){ 
     try { 

      Thread.sleep(500); 
     } catch (InterruptedException ex) { 
      Logger.getLogger(Run2.class.getName()).log(Level.SEVERE, "....", ex); 
     } 
     System.out.println(i); 


    } 

} 
} 

主类:

public class Threading { 

/** 
* @param args the command line arguments 
*/ 
public static void main(String[] args) { 

    Run r= new Run(); 
    Thread t1=new Thread(r); 
    t1.start(); 

    Run2 r2=new Run2(); 
    Thread t2=new Thread(r2); 

    t2.start(); 


} 

} 

回答

2

您的类Run2的方法应该命名为run而不是run2。

5

重命名RUN2的方法run2run。你是Thread的子类,所以你得到一个没有任何作用的运行方法(实际上它检查它是否被传递到目标runnable中,在这种情况下,它调用目标上的运行,但由于目标为null,什么都不做),这就是运行。

养成实现Runnable而不是扩展Thread的习惯,并使用@Override注释来捕捉错误,如果您认为自己压倒了某些东西,但却不是。

+0

谢谢...... :) – hamid 2013-04-12 16:50:37

+0

@ user2271636:np,这是一个很容易犯的错误。希望这可以帮助。 – 2013-04-12 16:58:19

+0

是的,它肯定是按预期工作.. !! :) – hamid 2013-04-12 20:15:50