Java线程run和start方式的区别

start():通过该方法启动线程的同时也创建了一个线程,真正实现了多线程,这是无需等待run()方法中的代码执行完毕就可以直接执行线程外面的代码,通过start创建的线程处于可运行状态,当得到CPU时间片后就会执行其中的run方法, 这里方法run()称为线程体,它包含了要执行的这个线程的内容,Run方法运行结束, 此线程随即终止。

run():在当前线程开启,比如当前线程是主线程,那么运行在主线程,如果当前线程是子线程,那么在子线程运行。还是要顺序执行,还是要等待run方法体执行完毕后才可继续执行下面的代码,这样就没有达到写线程的目的。

示范一:在主线程通过start方法开启线程

  new Thread(new Runnable() {
                @Override
                public void run() {//Thread-5878
                    System.out.println("====本线程是通过start方式开启的,会单独开启一个线程==1==="+currentThread().getName());
                }
            }).start();

示范二:在主线程通过run方法开启线程

  new Thread(new Runnable() {//Thread-main
                @Override
                public void run() {
                    System.out.println("====本线程是通过在主线程中run方式开启的,并没有创建一个线程==2==="+currentThread().getName());
                }
            }).run();//run开启是在当前线程

示范三:在子线程通过run方法开启新线程

new Thread(new Runnable() {
                @Override
                public void run() {
                    new Thread(new Runnable() {
                        @Override
                        public void run() {//run是在当前线程运行也就是外层的子线程   Thread-5880
                            System.out.println("====本线程是通过在子线程中通过run方式开启的,并没有创建一个线程==3==="+currentThread().getName());
                        }
                    }).run();//run开启是在当前线程
                }
            }).start();

上面三种方式,其执行顺序是:

第一组数据:
====本线程是通过在主线程中run方式开启的,并没有创建一个线程==2===main

====本线程是通过在子线程中通过run方式开启的,并没有创建一个线程==3===Thread-5880

====本线程是通过start方式开启的,会单独开启一个线程==1===Thread-5878


第二组数据:
====本线程是通过在主线程中run方式开启的,并没有创建一个线程==2===main

====本线程是通过start方式开启的,会单独开启一个线程==1===Thread-5882

====本线程是通过在子线程中通过run方式开启的,并没有创建一个线程==3===Thread-5884

其中第二种运行在主线程,第一种和三种运行在子线程。二三执行的先后顺序不确定。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

程序员学园

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值