• 微信公众号:美女很有趣。 工作之余,放松一下,关注即送10G+美女照片!

线程中start()方法和run()方法的区别

互联网 diligentman 2周前 (04-29) 4次浏览

线程中start()方法和run()方法的区别

Java中的线程是通过Java.lang.Thread实现的,可以通过实例化Thread一个对象来创建一个线程,然后调用start()启动,但是Thread的一个特定的方法run()也可以启动线程,这两个方法有什么区别呢?

线程状态

在Java当中,线程通常有五种状态:创建、运行、阻塞、等待、终止

NEW——————->新建状态,没有调用start()之前的状态
RUNNABLE———->运行状态,(running执行中,ready就绪(等待cpu时间片))
BLOCKED————>阻塞状态,
WAITING————–>等待状态,没有明确的等待结束时间,调用wait()
TIMED_WAITING—>超时等待状态,有明确的等待时间,如:sleep(xxx)
TERMINATED——–>终止状态

多线程原理:
我们一般使用thread new一个线程,然后调用start方法启动,线程就会处于运行状态中ready,等待CPU调度,然后再执行线程里面的run()方法,使用start方法才真正实现了多线程运行,因为这个时候不用等待我们的run方法执行完成就可以继续执行下面的代码,这才叫多线程。

如果直接使用thread执行run方法会怎么样呢?
因为run方法是thread里面的一个普通的方法,如果直接调用run()方法,这个时候它会运行在主线程中的,因为程序中只有主线程一个线程,如果有两个线程,都是直接调用run()方法,那么他们的执行顺序一定是按顺序执行的,并没有实现多线程的目的。

代码对比

public class ThreadDemo5 {
    public static final boolean flag=false;
    public static void main(String[] args) {
        Thread t1=new Thread(new Runnable() {
            @Override
            public void run() {
                System.out.println(Thread.currentThread().getName());
            }
        });
        t1.start();
    }
}

调用start()方法,线程名是默认的
线程中start()方法和run()方法的区别

public class ThreadDemo5 {
    public static final boolean flag=false;
    public static void main(String[] args) {
        Thread t1=new Thread(new Runnable() {
            @Override
            public void run() {
                System.out.println(Thread.currentThread().getName());
            }
        });
        t1.run();
    }
}

调用run(),线程名是main
线程中start()方法和run()方法的区别

可以参考下面这篇博客:
有三个线程,分别只能打印A,B和C,要求按顺序打印ABC,打印10次

总结:start()方法来启动线程,真正实现了多线程,run()方法当作普通方法的方式调用


程序员灯塔
转载请注明原文链接:线程中start()方法和run()方法的区别
喜欢 (0)