java多线程调用run和不调用run的区别

当在java程序中创建一个线程的时候,会三种情况:
1,只运行run方法
2,先执行start,再执行run方法
3,只运行start方法
三者的区别如下:

运行方式 区别
只运行run 只运行run的时候,多个线程的执行顺序是按代码顺序执行的,只不过执行的线程是当前线程,而不是你定义的线程,比如:你在main函数里面运行了定义了线程1、2、3。那么只调用1.run()、2.run()、3.run()的话,运行的线程实际上还是main线程的,和1、2、3没有关系,这个时候线程类就相当于普通类,调用run方法,就相当于调用了一个普通类的方法
先执行start,再运行run 这时候,才具有线程调用的同步执行效果,执行任务的线程可能是当前线程、也可能是你定义的线程
只运行start 这个时候会把任务的执行交给任务规划器,具体线程的执行需要等待系统去安排,任务执行的时间和顺序也是不确定的,但是这些任务肯定是你定义的线程运行的,而不像只运行run时候的现象,当前主动调用的线程不会参与这些任务的执行,例如像只运行run的情形,main不会定义线程里面的任务的
ps:附上我测试的代码,大家可以注释一部分,自己观看结果
class OneThread extends Thread{
      private int count =5;
      public OneThread(String name ){
           super ();
           this .setName( name );
     }
      @Override
      public void run(){
           super .run();
           while ( count >0){
               count --;
              System. out .println( "由" + this .currentThread().getName()+ "计算. count=" + count );
          }
     }
}
public class ThreadExample {
public static void main(String args []){
     OneThread a = new OneThread( "A" );
     OneThread b = new OneThread( "B" );
     OneThread c = new OneThread( "C" );
     OneThread d = new OneThread( "D" );
      a .start();
      b .start();
      c .start();
      d .start();
      a .run();
      b .run();
      c .run();
      d .run();
     
}
}
评论 2
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值