解决方案 »

  1.   

    因为你下面调用了setName方法,覆盖了构造方法里面的名字,想知道setName方法怎么传递参数的,你去看下源码,一看就直到怎么回事了
      

  2.   

    public class CreateThread1 {
    public static void main(String[] args) throws InterruptedException {
    MyThread th = new MyThread("周黑鸭"); th.start();
    Thread.sleep(2000);
    th.setName("喵菜头");
    th.setPriority(10); th.run(); }
    }
    你那样写,第一个线程还没打印"我的名字是: " + this.getName(); 就已经执行接下来的代码th.setName("喵菜头"); 
      

  3.   

    这个可以不用线程的思维来考虑
    Thread类有个属性name,你开始你赋值给他"周黑鸭"
    然后又setName("喵菜头");那这个name属性已经变成"喵菜头"了况且线程还没run()
      

  4.   

    这就是start和run的差别了吧。start是异步的得等cpu调度才能执行,run就是对象方法直接调用了。