java 线程 run_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

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

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值