飘飞的海

 

Java中Thread的start和run方法的区别

1、start() 方法启动线程,该线程进入就绪队列,不是线程马上执行,它需要等待CPU进程调度机制。

2、run() 是表示线程的运行,是线程对象的一个方法,里面是具体的线程实现逻辑,所以一个线程调用start() 方法后是否执行到run方法看CPU调度到该线程没。

3、如果使用线程对象直接调用run方法,相当于调用了一个普通方法,并没有启动该线程。程序中还是只有线程对象所在的线程,并没有增加新的线程。

如下例子说明调用这两个方法后的区别:

A、线程类

class MyThread implements Runnable{

    @Override
    public void run() {
        // TODO Auto-generated method stub
        System.out.println("Have run");
    }
    
}

B、测试start方法

    public static void main(String[] args) {
        Thread my=new Thread(new MyThread());
        System.out.println("before start: "+my.getState());
        my.start();
        System.out.println("after start: "+my.getState());
    }

输出结果:

before start: NEW
after start: RUNNABLE
Have run

C、测试run方法

    public static void main(String[] args) {
        Thread my=new Thread(new MyThread());
        System.out.println("before run: "+my.getState());
        my.run();//相当于调用了一个普通方法
        System.out.println("after run: "+my.getState());
    }

 

输出结果:

before run: NEW
Have run
after run: NEW 

posted on 2012-09-20 15:10  飘飞的海  阅读(193)  评论(0编辑  收藏  举报

导航