小弟最近在学习线程方面的内容。写了一个小程序,但是我跟踪代码时 如:
Hello h = new Hello();
h.start();
在start()方法执行完之后并没有进入线程Hello并执行里面的run方法,不太明白。希望有这方面经验的大虾看看,
最好是详细的解释一下。小弟不胜感激!

解决方案 »

  1.   

    我只想知道线程在调用完start()方法之后是否会马上执行线程run()的代码。
      

  2.   

    当然不会了 调用start()会先创建一个新的线程,这个线程进行一些初始化工作,然后再由这个线程调用run()
      

  3.   

    另,  一个多线程程序一旦stop之后,是不能通过调用start()来重新启动的
      

  4.   

    线程什么时候执行是有操作系统来决定的,start()只是表示该线程处于可运行状态,具体什么时候执行要看操作系统的调度器
      

  5.   

    1.如果Hello继承ThreadHello h = new Hello();
    h.start();2.如果Hello实现Runnable
    Hello h = new Hello();
    h.run();共同执行线程方法:
    Hello h = new Hello();
    new Thread(h).start();
      

  6.   

    start()方法执行之后表面上看起来直接执行run()方法,但是两者是有很大差别的:
    run()方法只是一个类中的普通方法,直接执行和普通的方法没有上面两样
    start()方法则不同,它首先做了创建线程等一系列工作,然后调用行的run()方法
      

  7.   

    我在线程中写了一个for循环使用Thread.sleep(300);好像没什么用这个线程好像没有休眠。线程仍然继续循环。难道也是上面说的是cpu自己调度的。
    public void run() {
            char c;
            for(int i =0;i<200 ;i++)
            {
             c=(char)(Math.random()*26+'A');
             theStack.push(c);
             System.out.println("Producer"+num+":"+c);
             try {
    Thread.sleep(300);
    } catch (InterruptedException e) {
    e.printStackTrace();
    }
            }
    }
      

  8.   

    调用Start方法之后并不会直接就执行run方法!在此之前还需要做一下参数的实例化!你可以把JDK的包导入到Eclipse中 这样你就可以在Eclipse中追踪start方法执行之后的过程了!
      

  9.   

    300 == 0.3s, 太短了  你改为3000ms就可以看见差别了
      

  10.   

    Hello h = new Hello();
    h.start();
    new Thread(h,"新线程1").start();   这样 你没有调用线程