Java start() run() 比较分析

本文通过实例对比分析了Java中线程的start()与run()方法的区别。start()用于启动新线程并执行run()方法,而直接调用run()则在当前线程中执行,不创建新线程。start()不可重复调用,run()可被多次调用。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

start():

启动一个新线程,新线程会执行相应的run()方法。

不能被重复调用。

run():

单独调用的话,会在当前线程中执行,并不会启动新线程。

必须执行完线程才会开始向下执行。

和普通的成员方法一样,可以被重复调用。

验证代码

github

/**
 * 
 * start()、run() 比较分析
 * start():启动一个新线程,新线程会执行相应的run()方法。不能被重复调用。
 * run():	单独调用的话,会在当前线程中执行,并不会启动新线程。
 * 			必须执行完线程才会开始向下执行。
 * 			和普通的成员方法一样,可以被重复调用。
 * 			
 * 
 * @version 1.0
 */
public class ThreadStartRun {

	public static void main(String[] args) throws InterruptedException {
		ThreadStartRunDemo t1 = new ThreadStartRunDemo();
		ThreadStartRunDemo t2 = new ThreadStartRunDemo();
		ThreadStartRunDemo t3 = new ThreadStartRunDemo();
		t1.setName("线程1");
		t2.setName("线程2");
		t3.setName("线程3");
		t1.run();
		t2.start();
		t3.start();
	}
	
}

class ThreadStartRunDemo extends Thread {
	
	public void run() {
		try {
			System.out.println(Thread.currentThread().getName()+"-----开始时间:"+DateUtil.dateToString(new Date(), "yyyy-MM-dd HH:mm:ss"));
			Thread.sleep(5000);
			System.out.println(Thread.currentThread().getName()+"-----结束时间:"+DateUtil.dateToString(new Date(), "yyyy-MM-dd HH:mm:ss"));
		} catch (InterruptedException e) {
			e.printStackTrace();
		}
	}
}

运行结果

main-----开始时间:2019-07-17 16:15:22
main-----结束时间:2019-07-17 16:15:27
线程2-----开始时间:2019-07-17 16:15:27
线程3-----开始时间:2019-07-17 16:15:27
线程2-----结束时间:2019-07-17 16:15:32
线程3-----结束时间:2019-07-17 16:15:32

VisualVM运行图

 

 

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值