初学线程时,总是将 run 方法和 start 方法搞混,那么为什么不直接用Thread类中的run方法呢?虽然二者是完全不同的两个方法,但刚开始使用时很难分清,原因就是因为初次使用时效果貌似是一样的,如下代码所示:
public static void main(String[] args) {
// 创建线程一
Thread thread = new Thread(new Runnable() {
@Override
public void run() {
System.out.println("执行线程一");
}
});
// 调用 run 方法
thread.run();
// 创建线程二
Thread thread2 = new Thread(new Runnable() {
@Override
public void run() {
System.out.println("执行线程二");
}
});
// 调用 start 方法
thread2.start();
}
以上程序的执行结果如下:
从上述结果可以看出,二者调用之后的执行效果都是一样,都可以成功执行任务。但是,如果在执行线程的时候,加上打印当前线程的名称就能看出二者的不同了,如下代码所示:
public static void main(String[] args) {
// 创建线程一
Thread thread = new Thread(new Runnable() {
@Override
public void run() {
// 获取到当前执行线程
Thread currThread = Thread.currentThread();
System.out.println("执行线程一,线程名:" + currThread.getName());
}
});
// 调用 run 方法
thread.run();
// 创建线程二
Thread thread2 = new Thread(new Runnable() {
@Override
public void run() {
// 获取到当前执行线程
Thread currThread = Thread.currentThread();
System.out.println("执行线程二,线程名:" + currThread.getName());
}
});
// 调用 start 方法
thread2.start();
}
以上程序的执行结果如下:
从上述结果我们可以看出:当调用 run 方法时,其实是调用当前主程序 main 来执行方法体的;而调用 start 方法才是真正的创建一个新线程来执行任务。
区别 1
run 方法和 start 方法的第一个区别是:调用 start 方法是真正开启一个线程来执行任务,而