码迷,mamicode.com
首页 > 编程语言 > 详细

Java多线程系列-start()和run方法的区别

时间:2018-10-12 17:51:31      阅读:163      评论:0      收藏:0      [点我收藏+]

标签:[]   over   str   不能   本质   test   string   system   running   

  • start()和run是Thread类里面的两个方法。
    学过的都知道,我们创建了一个线程类,通过调用start()方法来启动线程,并且该线程会执行内部的run()方法,那么我们可以直接调用run()方法吗。
    答案显而易见,当然是可以啊,可是前后两者还是有本质的区别的。

start()run()

  • 调用start()方法,会创建一个新的线程,而这个新的线程会执行Thread类中的run方法
  • 调用run()方法,不会创建新的线程,而是直接在当前的线程直接执行该方法。

以上就是这两个方法的本质区别,并且大多数情况下,直接调用run()的错误的。

public class StartAndRunTest {

    private static class MyThread extends Thread{

        private String name;

        public MyThread(String name) {
            this.name = name;
        }

        @Override
        public void run() {
            System.out.println(name+" running in "+Thread.currentThread().getName());
        }
    }

    public static void main(String[] args) {
        MyThread m1=new MyThread("m1");
        MyThread m2=new MyThread("m2");

        m1.start();
        m2.run();
    }

}
/*
m2 running in main
m1 running in Thread-0
*/

上面的例子你可以看到,调用start的Thread类在新的线程上执行run方法,而直接调用run()方法的则是在当前main线程。(一个线程不能重复start(),具体可以看内部实现)

Java多线程系列-start()和run方法的区别

标签:[]   over   str   不能   本质   test   string   system   running   

原文地址:https://www.cnblogs.com/viscu/p/9779297.html

(0)
(0)
   
举报
评论 一句话评论(0
登录后才能评论!
© 2014 mamicode.com 版权所有  联系我们:gaon5@hotmail.com
迷上了代码!