一)start()和run()方法简介
run():是Thread中一个普通成员方法,可多次调用,调用该方法不会启动一个新线程。
private Runnable target;
@Override
public void run() {
if (target != null) {
target.run();
}
}
start():是Thread中一个线程安全的方法,该方法只能被调用一次,如多次调用,会报IllegalThreadStateException异常。
public synchronized void start() {
// 当状态为新建时,才执行后面的代码,0=新建
if (threadStatus != 0)
throw new IllegalThreadStateException(); // 多次调用,报IllegalThreadStateException异常,因为该线程状态已经不是“新建”
group.add(this); // 把当前线程添加到线程组中
boolean started = false; // 标记线程是否已启动
try {
start0(); // 调用start0()方法启动线程
started = true;
} finally {
try {
if (!started) { // 销毁该线程
group.threadStartFailed(this);
}
} catch (Throwable ignore) {
}
}
}
二)start()和run()方法区别案例
public class MyThread extends Thread {
public void run() {
System.out.println(Thread.currentThread().getName() + "线程-->执行了run()方法!");
}
public static void main(String[] args) {
MyThread my = new MyThread();
System.out.println(Thread.currentThread().getName() + "线程,调用run()方法!");
my.run();
System.out.println(Thread.currentThread().getName() + "线程,调用start()方法!");
my.setName("MyThread");
my.start();
// my.start(); // 多次调用,报IllegalThreadStateException异常,因为该线程状态已经不是“新建”
}
}
打印效果图:
案例详解:
1)先自定义一个线程类并继承Thread类,重写run()方法。
2)启动main线程,先调用run()方法。
3)在设置自定义线程的名称,调用start()启动线程。
识别二维码关注个人微信公众号
本章完结,待续,欢迎转载!
本文说明:该文章属于原创,如需转载,请标明文章转载来源!