java 多线程调用start()与 run()的区别

1.start()方法来启动线程,真正实现了多线程运行,这时无需等待run方法体代码执行完毕而直接继续执行下面的代码;

2.run()方法当作普通方法的方式调用,程序还是要顺序执行,还是要等待run方法体执行完毕后才可继续执行下面的代码;

 

通过调用Thread类的start()方法来启动一个线程,这时此线程是处于就绪状态,并没有运行。
然后通过此Thread类调用方法run()来完成其运行操作的,这里方法run()称为线程体,它包含了要执行的这个线程的内容,Run方法运行结束,此线程终止,而CPU再运行其它线程。

而如果直接用Run方法,这只是调用一个方法而已,程序中依然只有主线程--这一个线程,其程序执行路径还是只有一条,这样就没有达到写线程的目的。

 

实例,如果都只调用run()方法,结果还是在主线程中执行的

public class ThreadTest01{
	
	public  static void main(String[] args) {
		
		//创建线程
		Thread t = new Processor01();
		//启动线程
//		t.start();//这段代码执行瞬间结束,告诉 jvm再分配一个新的栈给t线程
					//run不需要程序员手动调用,系统线程启动后,自动调用run方法
		
		t.run();	//这是普通的方法调用,这样做程序只有一个线程,run方法结束后,下面的程序才能够继续执行
		Processor02 t2= new Processor02();
//		new Thread(t2).start();
		t2.run();
		//这段代码在 主线程中运行
		for (int i = 0; i <50; i++) {
			System.out.println( Thread.currentThread().getName()+ "--"+ "main ---->" + i);
		}
		//有了多线程后,main方法结束之时主线程栈中没有方法栈帧了
		//但是其他线程或者其他栈中还有 栈帧
		//main方法结束,程序可能还在运行
		
	}

}

//定义线程
class Processor01 extends Thread{
	public  void run() {
		for(int i =0 ;i<50;i++) {
			System.out.println( Thread.currentThread().getName()+"--"+  "Thread  run---->"+ i);
		}
	}
	
}

class Processor02 implements Runnable{

	@Override
	public void run() {
		for (int i = 0; i <50; i++) {
			System.out.println( Thread.currentThread().getName()+ "--"+ "runnable run ---->" + i);
		}
		
	}
	
}

结果:

main--Thread  run---->0
main--Thread  run---->1
main--Thread  run---->2
main--Thread  run---->3
main--Thread  run---->4
main--Thread  run---->5
main--Thread  run---->6
main--Thread  run---->7
main--Thread  run---->8
main--Thread  run---->9
main--Thread  run---->10
main--Thread  run---->11
main--Thread  run---->12
main--Thread  run---->13
main--Thread  run---->14
main--Thread  run---->15
main--Thread  run---->16
main--Thread  run---->17
main--Thread  run---->18
main--Thread  run---->19
main--Thread  run---->20
main--Thread  run---->21
main--Thread  run---->22
main--Thread  run---->23
main--Thread  run---->24
main--Thread  run---->25
main--Thread  run---->26
main--Thread  run---->27
main--Thread  run---->28
main--Thread  run---->29
main--Thread  run---->30
main--Thread  run---->31
main--Thread  run---->32
main--Thread  run---->33
main--Thread  run---->34
main--Thread  run---->35
main--Thread  run---->36
main--Thread  run---->37
main--Thread  run---->38
main--Thread  run---->39
main--Thread  run---->40
main--Thread  run---->41
main--Thread  run---->42
main--Thread  run---->43
main--Thread  run---->44
main--Thread  run---->45
main--Thread  run---->46
main--Thread  run---->47
main--Thread  run---->48
main--Thread  run---->49
main--runnable run ---->0
main--runnable run ---->1
main--runnable run ---->2
main--runnable run ---->3
main--runnable run ---->4
main--runnable run ---->5
main--runnable run ---->6
main--runnable run ---->7
main--runnable run ---->8
main--runnable run ---->9
main--runnable run ---->10
main--runnable run ---->11
main--runnable run ---->12
main--runnable run ---->13
main--runnable run ---->14
main--runnable run ---->15
main--runnable run ---->16
main--runnable run ---->17
main--runnable run ---->18
main--runnable run ---->19
main--runnable run ---->20
main--runnable run ---->21
main--runnable run ---->22
main--runnable run ---->23
main--runnable run ---->24
main--runnable run ---->25
main--runnable run ---->26
main--runnable run ---->27
main--runnable run ---->28
main--runnable run ---->29
main--runnable run ---->30
main--runnable run ---->31
main--runnable run ---->32
main--runnable run ---->33
main--runnable run ---->34
main--runnable run ---->35
main--runnable run ---->36
main--runnable run ---->37
main--runnable run ---->38
main--runnable run ---->39
main--runnable run ---->40
main--runnable run ---->41
main--runnable run ---->42
main--runnable run ---->43
main--runnable run ---->44
main--runnable run ---->45
main--runnable run ---->46
main--runnable run ---->47
main--runnable run ---->48
main--runnable run ---->49
main--main ---->0
main--main ---->1
main--main ---->2
main--main ---->3
main--main ---->4
main--main ---->5
main--main ---->6
main--main ---->7
main--main ---->8
main--main ---->9
main--main ---->10
main--main ---->11
main--main ---->12
main--main ---->13
main--main ---->14
main--main ---->15
main--main ---->16
main--main ---->17
main--main ---->18
main--main ---->19
main--main ---->20
main--main ---->21
main--main ---->22
main--main ---->23
main--main ---->24
main--main ---->25
main--main ---->26
main--main ---->27
main--main ---->28
main--main ---->29
main--main ---->30
main--main ---->31
main--main ---->32
main--main ---->33
main--main ---->34
main--main ---->35
main--main ---->36
main--main ---->37
main--main ---->38
main--main ---->39
main--main ---->40
main--main ---->41
main--main ---->42
main--main ---->43
main--main ---->44
main--main ---->45
main--main ---->46
main--main ---->47
main--main ---->48
main--main ---->49

 

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

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值