黑马程序员技术交流社区

标题: 自己练习写的线程出问题了 [打印本页]

作者: coqns    时间: 2012-12-9 15:13
标题: 自己练习写的线程出问题了
本帖最后由 coqns 于 2012-12-9 20:59 编辑

以前看视屏学习也就是边看边跟着打代码的练过一遍,今天开始想自己回忆练习着打一次,结果自己一打就出问题了,最基础的通过继承Thread类来实现多线程,写完后程序是正常运行,但是结果一看居然是单线程(线程一执行完了才执行线程二,根本不是交互执行)。。。。代码如下
  1. public class Demo {
  2.         
  3.         public static void main(String[] args){
  4.                 ThreadDemo t1=new ThreadDemo();
  5.                 ThreadDemo t2=new ThreadDemo();
  6.                 t1.start();
  7.                 t2.start();
  8.                
  9.                 for(int i=0;i<60;i++){
  10.                         System.out.println("Thread-main="+i);
  11.                 }
  12.         }
  13. }

  14. class ThreadDemo extends Thread{
  15.         
  16.         public void run(){
  17.                 for(int i=0;i<60;i++){
  18.                         System.out.println(Thread.currentThread().getName()+"="+i);
  19.                 }
  20.         }
  21. }
复制代码

作者: 刘文飞    时间: 2012-12-9 15:40
  1. public class Demo {
  2.         
  3.         public static void main(String[] args){
  4.                 ThreadDemo t1=new ThreadDemo();
  5.                 ThreadDemo t2=new ThreadDemo();
  6.                 t1.start();
  7.                 t2.start();
  8.                 int i = 0;
  9.                 while(true){
  10.                                
  11.                             try {
  12.                                                         Thread.sleep(100);
  13.                                         } catch (InterruptedException e) {
  14.                                                 // TODO Auto-generated catch block
  15.                                                 e.printStackTrace();
  16.                                         }
  17.                            
  18.                     System.out.println("Thread-main="+ i++);
  19.                 }
  20.         }
  21. }

  22. class ThreadDemo extends Thread{
  23.         int i = 0;
  24.         public void run(){
  25.                 while(true){
  26.                         try {
  27.                                                 Thread.sleep(100);
  28.                                         } catch (InterruptedException e) {
  29.                                                 // TODO Auto-generated catch block
  30.                                                 e.printStackTrace();
  31.                                         }
  32.                     System.out.println(Thread.currentThread().getName()+"="+i++);
  33.                 }
  34.         }
  35. }
复制代码
是交互的,建议把循环次数弄大点,或者让线程睡会,就有明显效果了.
次数太小,都是双核cpu且性能不错,所以会导致一个线程执行完了,下一个才抢到cpu执行权.
作者: coqns    时间: 2012-12-9 20:58
刘文飞 发表于 2012-12-9 15:40
是交互的,建议把循环次数弄大点,或者让线程睡会,就有明显效果了.
次数太小,都是双核cpu且性能不错,所以会导 ...

我还纠结代码呢,没想到居然是因为电脑配置问题,我把循环增大到1000就好了。。。。谢谢你的解答




欢迎光临 黑马程序员技术交流社区 (http://bbs.itheima.com/) 黑马程序员IT技术论坛 X3.2