为什么我们要去调用start方法,而不是直接调用run方法?

本文详细解析了Java中线程的启动机制,阐述了start()方法与run()方法的区别,解释了如何正确创建和启动线程,以及start()方法如何在新的操作系统线程上执行run()方法。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

         启动线程肯定是要用start()方法。当用start开始一个线程后,线程就进入了就绪状态,使线程所代表的虚拟机处理机处于可运行状态,这意味着它可以有jvm调度并执行。这并不意味着线程就会立即运行。当cpu分配给它时间时,才开始执行run()方法(如果有的话)。start()是方法,它调用run()方法,而run()方法是你必须重写的,run()方法中包含的是线程的主体。

        run()方法只是一个类中的普通方法,直接执行和普通的方法没有设么两样;
        start()方法则不同,它首先做了创建线程等一系列工作,然后调用行的run()方法;

新建线程

Thread thread = new Thread();
thread.start();

这样就开启了一个线程。

有一点需要注意的是

Thread thread = new Thread();
thread.run();

直接调用run方法是无法开启一个新线程的。

Thread thread = new Thread("t1")
{
    @Override
    public void run()
    {
        // TODO Auto-generated method stub
        System.out.println(Thread.currentThread().getName());
    }
};
thread.run();

start方法其实是在一个新的操作系统线程上面去调用run方法。换句话说,直接调用run方法而不是调用start方法的话,它并不会开启新的线程,而是在调用run的当前的线程当中执行你的操作。

Thread thread = new Thread("t1")
{
    @Override
    public void run()
    {
        // TODO Auto-generated method stub
        System.out.println(Thread.currentThread().getName());
    }
};
thread.start();

如果调用start,则输出是t1

如果是run,则输出main。(直接调用run其实就是一个普通的函数调用而已,并没有达到多线程的作用)
 

评论 2
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值