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