【2月1日】并发(六):run()和start()

本文详细介绍了在Java中创建线程的两种主要方法:继承Thread类与实现Runnable接口。通过具体的代码示例展示了如何使用这两种方式,并解释了它们之间的区别,特别是调用start()方法与直接调用run()方法的不同效果。

package com.tree.thread;

public class MyThread extends Thread {
	private String name;
	
	public MyThread (String name){
		this.name =name;
	}
	
	public void run(){
		for(int i = 0;i<100;i++){
			System.out.println(name+":"+i);
		}
		super.run();
	}

}
MyThread.class

package com.tree.thread;

public class MyRunnable implements Runnable {
	private String name;
	public MyRunnable(String name){
		this.name=name;
	}

	@Override
	public void run() {
		// TODO Auto-generated method stub
		for(int i =0;i<100;i++){
			System.out.println(name +":"+i);
		}

	}

}
MyRunable.class


public class ThreadDemo01 {


public static void main(String[] args) {
// TODO Auto-generated method stub
// MyThread t1 = new MyThread("A");
// MyThread t2 = new MyThread("B");
// 线程的启动是通过start方法
// t1.run();
// t2.run();
// t3.run();

MyRunnable r1 = new MyRunnable("A");
MyRunnable r2 = new MyRunnable("B");
Thread t1 = new Thread(r1);
Thread t2 = new Thread(r2);
t1.start();
t2.start();


}


}


ThreadDemo01.class


Thread中的start()方法通知“线程规划器”此线程已经准备就绪,等待调用线程对象的run()方法,也就是使线程得到运行,启动线程,具有异步执行的效果。如果调用线程的run()就不是异步执行,而是同步,那么此线程对象并不交给“线程规划器”来进行处理,而是由main主线程来调用run()方法,也就是必须等run()方法中的代码执行完后才可以执行后面的代码。下图分别是使用start()和调用run()的结果。另外,还需要注意的是,执行start()方法的顺序并不代表线程启动的顺序。


图1.start()--异步执行


图2.run()--同步执行

评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
红包 添加红包
表情包 插入表情
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值