首页 > 其他分享 >线程的 run()和 start()有什么区别?

线程的 run()和 start()有什么区别?

时间:2023-03-28 13:12:21浏览次数:30  
标签:调用 run start 线程 多线程 方法

每个线程都是通过某个特定Thread对象所对应的方法run()来完成其操作的,run()方法称为线程体。通过调用Thread类的start()方法来启动一个线程。

start() 方法用于启动线程,run() 方法用于执行线程的运行时代码。run() 可以重复调用,而 start() 只能调用一次。

start()方法来启动一个线程,真正实现了多线程运行。调用start()方法无需等待run方法体代码执行完毕,可以直接继续执行其他的代码;此时线程是处于就绪状态,并没有运行。然后通过此Thread类调用方法run()来完成其运行状态, run()方法运行结束, 此线程终止。然后CPU再调度其它线程。

run()方法是在本线程里的,只是线程里的一个函数,而不是多线程的。如果直接调用run(),其实就相当于是调用了一个普通函数而已,直接调用run()方法必须等待run()方法执行完毕才能执行下面的代码,所以执行路径还是只有一条,根本就没有线程的特征,所以在多线程执行时要使用start()方法而不是run()方法。

 

标签:调用,run,start,线程,多线程,方法
From: https://www.cnblogs.com/xfeiyun/p/17264779.html

相关文章

  • 为什么我们调用 start() 方法时会执行 run() 方法,为什么我们不能直接调用 run() 方法?
    new一个Thread,线程进入了新建状态。调用start()方法,会启动一个线程并使线程进入了就绪状态,当分配到时间片后就可以开始运行了。start()会执行线程的相应准备工作,然后......
  • 守护线程和用户线程有什么区别呢?
    在 Java中通常有两种线程:守护线程(DaemonThread)和用户线程(UserThread)。守护线程:是一种特殊的线程,在后台默默地完成一些系统性的服务,比如垃圾回收线程、JIT 线程都是......
  • Jmter 和 LoadRunner的适用场景
    1、LoadRunner的好处:结果分析很全面,很细,更能定位到问题根因。模拟的场景更全面,更符合用户的实际操作,比如思考时间,同时调用websoket刷新界面,加载前端的一些资源等,测试响应......
  • python apscheduler 定时任务的基本使用-8-线程执行器ThreadPoolExecutor
    pythonapscheduler定时任务的基本使用-8-线程执行器ThreadPoolExecutor1、线程执行器ThreadPoolExecutor先说个人总结假设启动线程数为N,任务数为M,misfire_grace_tim......
  • C#:多线程操作Dictionary
    为了在多线程环境下操作Dictionary,我们需要确保线程安全。其中一种实现方式是使用ConcurrentDictionary类,该类位于System.Collections.Concurrent命名空间中。Concurrent......
  • linux内核线程优先级配置
    linux内核线程优先级配置/*referencedriver/spi/spi.c*/#include<linux/sched/rt.h>#include<uapi/linux/sched/types.h>staticstructsched_paramparam={......
  • 线程池
    1、线程池出现原因以前写多线程时,用到线程的时候就创建(浪费时间);用完之后线程就消失(浪费资源)。2、线程池主要核心原理  3、线程池代码实现(1)创建线程池(2)提交任务(3)......
  • 多线程 wait() notify的用法
    main类 packageendual;publicclassMainApp{ publicstaticvoidmain(String[]args){ Queryq=newQuery(0); Threadthread=newThread(newThrea......
  • 多线程——生产者和消费者(等待唤醒机制)
    生产者和消费者(等待唤醒机制)生产者消费者模式是一个十分经典的多线程协作的模式举例:   实现方式一: 线程的方法代码编写技巧,如run():步骤:(1)循环;(2)同步代码块;(3)判断......
  • 线程的状态
    多线程的6种状态  注意:Java中没有定义运行状态,所以线程只有6种状态。因为线程抢到CPU的执行权后,就交给操作系统了,在这个运行过程中虚拟机就不用管了,所以Java没有定义......