线程中run()和start()的区别

start() 和 run()的区别说明

start() : 它的作用是启动一个新线程,新线程会执行相应的run()方法。start()不能被重复调用,真正的实现了多线程并发运行。
run() : 方法只是类的一个普通方法而已,如果直接调用Run方法,程序中依然只有主线程这一个线程,其程序执行路径还是只有一条,还是要顺序执行,还是要等待run方法体执行完毕后才可继续执行下面的代码,这样就没有达到多线程的目的!

代码示例:

1. 实现Runnable接口

public class ThreadStartAndRun implements Runnable {
    private int num = 2;

    @Override
    public void run() {
        while (true) {
            try {
                Thread.sleep(1000);
            } catch (InterruptedException e) {
                e.printStackTrace();
            }
            if (num > 0) {
                System.out.println(Thread.currentThread().getName() + ",i=" + num--);
            } else {
                break;
            }
        }
    }
}

2. start() 方法开俩个线程

public static void main(String[] arg) {
    for (int i = 0; i < 2; i++) {
        Thread t=new Thread(new ThreadStartAndRun());
        t.start();
    }
}

输出结果:

Thread-0,i=2
Thread-1,i=2
Thread-0,i=1
Thread-1,i=1

可以看出 start() 方法开启了俩个线程并发执行了

3. run() 方法同样开俩个线程

public static void main(String[] arg) {
    for (int i = 0; i < 2; i++) {
        Thread t1 = new Thread(new ThreadStartAndRun());
        t1.run();
    }
}

输出结果:

main,i=2
main,i=1
main,i=2
main,i=1

可以发现 run() 程序中依然只有主线程这一个线程,并且是顺序执行

猜你喜欢

转载自blog.csdn.net/BeiShangBuZaiLai/article/details/81567601