Thread中 start() 和 run() 的区别

它们的区别从源码中很明显可以看出来。

start方法:

    public synchronized void start() {
        /**
         * This method is not invoked for the main method thread or "system"
         * group threads created/set up by the VM. Any new functionality added
         * to this method in the future may have to also be added to the VM.
         *
         * A zero status value corresponds to state "NEW".
         */
        if (threadStatus != 0)
            throw new IllegalThreadStateException();

        /* Notify the group that this thread is about to be started
         * so that it can be added to the group's list of threads
         * and the group's unstarted count can be decremented. */
        group.add(this);

        boolean started = false;
        try {
            start0();
            started = true;
        } finally {
            try {
                if (!started) {
                    group.threadStartFailed(this);
                }
            } catch (Throwable ignore) {
                /* do nothing. If start0 threw a Throwable then
                  it will be passed up the call stack */
            }
        }
    }
    private native void start0();

这里直接就调用了native方法是真正的实现了线程,提交给了CPU进行处理

run方法

 /* What will be run. */
    private Runnable target;
    ...
    @Override
    public void run() {
        if (target != null) {
            target.run();
        }
    }

run方法只是执行了 线程创建时实现的run方法而已,其执行方法时所在的线程并没有变化,比如在MainThread中创建线程时,那么run方法也是在MainThread中执行的

下面用个例子验证一下

public class ThreadTest002 {


    public static void main(String[] args) {
        Thread thread01 = new Thread(new Thread02("C"));
        Thread thread02 = new Thread(new Thread02("D"));
        thread01.start();
        thread02.run();


    }
}

class Thread02 implements Runnable {
    private String name;

    public Thread02(String name) {
        this.name = name;
    }

    @Override
    public void run() {
        System.out.println(name + "-" + "--" + Thread.currentThread().getName());
    }
}

输出结果为:

D—main
C—Thread-0

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值