Java中run()方法和start()方法的小区别

好久未接触多线程,今日听完视频课,又有新的感觉,做小记以备自习

其中最关键的一句话是:

start()方法会调用底层方法开启线程,并且会调用run()方法

而如果只是创建完线程,但并未调用start()方法的情形下直接调用run()方法,则表示普通的对象调用方法,

自创建的线程并未开启,仅仅是主线程在进行,主线程执行run()方法中的代码

package practiceMySelf;
/**
 * 创建一个类Test,继承自Thread
 * 该类要重写run()方法
 * 为方便后面区分线程,通过使用构造方法为Test类添加一个名字
 * 在主线程的main()方法中,创建两个Test对象,也就是"创建"两个线程(此时程序中有三个线程对象
 * 分别是主线程对象 ,Test线程对象t1和t2,java 虚拟机默认调用主线程对象,开启并运行其中代码,
 * 但t1和t2则分别需要手动开启调用)
 * 
 * 线程中run()和start()方法的区别是
 * start()会调用底层开启线程,并调用run()方法。运行时,每次运行结果都可能不同,会出现几个线程不同代码交替执行现象
 * 但是如果未开启线程,直接运行run()方法 ,只是普通的对象调用方法,并未开启线程,
 * 相当于主线程在运行方法,不会出现几段代码交替执行的现象
 * */

class Test extends Thread{
	private String name;
	public Test(String name){
		this.name=name;
	}
	public void run(){
		for(int i=0;i<60;i++){
			System.out.println(name+"run.."+i);
		}
	}
}
class ThreadDemo{
	
	public static  void main(String[] args){
		
		Test t1=new Test("one...run");
		Test t2=new Test("two...run");
//		t1.start();
//		t2.start();
//以上代码(将下面的t1.run();t2.run();注释调,上方的start()方法放开执行)结果运行为,三个线程在运行,
//具体哪行代码执行,要看几个线程谁争取到了CPU的运行权利,
//几段代码会出现交替执行的情况

//以下代码(将上面的t1.start();t2.start();注释调,下方的run()方法放开执行),结果运行为,
//一个线程在运行,另外两个线程只是创建出来,但并未开启
//t1.run();t2.run();仅仅相当于普通的对象调用方法,而且对象是被主线程调用
//几段代码不会出现交替执行的现象
		t1.run();
		t2.run();
		for(int i=0;i<60;i++){
			System.out.println("Hello World");
		}
	}
}



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

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值