Java线程中run()和start()方法讲解

该博客围绕Java多线程中run()和start()方法展开。介绍了两个方法的基本概念并举例说明,分析了二者区别与联系。start()启动线程使其就绪,run()执行线程代码;start()是多线程,只能调用一次,且会调用run(),而run()可多次调用,相当于普通方法。

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


一、run()方法

  • 方法介绍
public void run()
/*
如果这个线程是使用单独的Runnable运行对象构造的,
则Runnable对象的run方法; 否则,此方法不执行任何操作并返回。 
Thread的Thread应该覆盖此方法。 
*/
  • 简单举例
public class testRunAndStart {
    public static void main(String[] args) {
        Thread thread1=new Thread(new Runnable() {
            @Override
            public void run() {
                try {
                    long start = System.currentTimeMillis();
                    Thread.sleep(1000);
                    long end = System.currentTimeMillis();
                    System.out.println("thread1执行,花费"+(end-start)/1000+"秒");
                } catch (InterruptedException e) {
                    e.printStackTrace();
                }

            }
        });
        Thread thread2=new Thread(new Runnable() {
            @Override
            public void run() {
                System.out.println("thread2执行");
            }
        });
        thread1.run();
        thread1.run();
        thread2.run();
        /*
        运行结果:
        thread1执行,花费1秒
        thread1执行,花费1秒
        thread2执行
         */
    }
}

二、start()方法

  • 方法介绍
public void start()
/*
导致此线程开始执行; Java虚拟机调用此线程的run方法。 
结果是两个线程同时运行:当前线程(从调用返回到start方法)
和另一个线程(执行其run方法)。 
不止一次启动线程是不合法的。 特别地,
一旦线程完成执行就可能不会重新启动。 
*/

  • 简单举例
public class testRunAndStart {
    public static void main(String[] args) {
        Thread thread1=new Thread(new Runnable() {
            @Override
            public void run() {
                try {
                    long start = System.currentTimeMillis();
                    Thread.sleep(1000);
                    long end = System.currentTimeMillis();
                    System.out.println("thread1执行,花费"+(end-start)/1000+"秒");
                } catch (InterruptedException e) {
                    e.printStackTrace();
                }

            }
        });
        Thread thread2=new Thread(new Runnable() {
            @Override
            public void run() {
                System.out.println("thread2执行");
            }
        });
        thread1.start();
        thread2.start();
        /*
        运行结果:
        thread2执行
        thread1执行,花费1秒
         */
    }
}

三、run()和start()区别与联系

  1. start()方法用于启动线程并使得线程处于就绪状态;run()方法用于执行线程的运行时代码(即run()方法相当于main线程下的普通方法,不是多线程的)。
    分析:看run()和start()的简单举例会发现:
    run()方法举例中,尽管thread1线程执行时会暂停1秒,但是它仍然在thread2之前运行,这就是因为调用run()方法只是看成main线程的一个普通函数,按照执行次序依次运行
    start()方法举例中:因为thread1线程执行时会暂停1秒,所以thread2会优先执行完成。因为start()方法是多线程的。
  2. satrt()方法只可以调用一次,run()方法可以调用多次。
  3. start()方法会调用run()方法(start()方法会执行线程的准备工作,然后再执行run()方法)。
评论 2
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值