首页
学习
活动
专区
圈层
工具
发布

thread类中start()和run()方法的区别

run方法体代码执行完毕而直接继续执行下面的代码: 通过调用Thread类的start()方法来启动一个线程,这时此线程是处于就绪状态,并没有运行。...然后通过此Thread类调用方法run()来完成其运行操作的,这里方法run()称为线程体,它包含了要执行的这个线程的内容,Run方法运行结束,此线程终止,而CPU再运行其它线程。...2,run()方法当作普通方法的方式调用,程序还是要顺序执行,还是要等待run方法体执行完毕后才可继续执行下面的代码: 而如果直接用run方法,这只是调用一个方法而已,程序中依然只有主线程–这一个线程,...3,调用start方法方可启动线程,而run方法只是thread的一个普通方法调用,还是在主线程里执行。...这两个方法应该都比较熟悉,把需要并行处理的代码放在run()方法中,start()方法启动线程将自动调用 run()方法,这是由jvm的内存机制规定的。

4.7K00
  • 您找到你想要的搜索结果了吗?
    是的
    没有找到

    Thread类的run()和start()方法的区别

    1、线程的start()方法   start()方法来启动线程,真正实现了多线程运行,这时无需等待run方法体代码执行完毕而直接继续执行下面的代码: 通过调用Thread类的start()方法来启动一个线程...然后通过此Thread类调用方法run()来完成其运行操作的,这里方法run()称为线程体,它包含了要执行的这个线程的内容,Run方法运行结束,此线程终止,而CPU再运行其它线程。...Thread-0---1 Thread-0---2 Thread-0---3 Thread-1---1 Thread-1---2 Thread-1---3 2、线程的run()方法   run()方法当作普通方法的方式调用...,程序还是要顺序执行,还是要等待run方法体执行完毕后才可继续执行下面的代码: 而如果直接用run方法,这只是调用一个方法而已,程序中依然只有主线程–这一个线程,其程序执行路径还是只有一条,这样就没有达到写线程的目的...这两个方法应该都比较熟悉,把需要并行处理的代码放在run()方法中,start()方法启动线程将自动调用 run()方法,这是由jvm的内存机制规定的。

    67730

    面试题:Thread的start和run的区别

    t.run(); //调用run方法 //调用执行 current main thread is main task run..... task thread is : main 换成调用方法t.start...(),执行 current main thread is main task run..... task thread is : Thread-0 小伙伴们是否已经知道他们的区别了 1、run方法就是个普通的方法...源码分析 知道了run和start的区别,我们来看看start方法源码 ? start方法中调用了本地方法start0,native即是本地方法(也是底层方法)。...start0映射的方法就是JVM_StartThread,我们再看一下jvm.cpp文件中JVM_StartThread方法,里面有段代码 ? 在看下thread_entry方法 ?...就是在thread_entry方法中调用run方法 总结 start方法中的基本流程 ? 小伙伴们看到这里,是不是感觉这个面试题很简单呢?

    1.1K10

    yeoman-generator 中的 run loop 实现

    run loop 所谓的run loop是IOS开发中的一个概念,具体来说是一个与线程相对应的对象,用它来实现线程自动释放池、延迟回调、触摸事件、屏幕刷新等功能。...yeoman中的run loop概念是说存在多个generator时,在我们给每一个genenrator类都定义了一系列具有优先级关系的属性事件用于构建不同的项目文件,每一次实例化genenrator的时候运行我们的构建程序...,end,开发者在generator中定义的方法名如果不在上面列出的事件中,那么将作为defalut事件,在configuring和writing中间被调用。...对象中的相应key的任务数组中添加新的方法元素。...每一个任务都是使用setImmediate在下一个事件循环中调用,Grouped Queue中添加了一个标志running,在run方法中判断,如果是runing状态则直接返回,不会调用exec,等到callback

    1.3K00

    聊聊kotlin中的run, let, with, apply, also ...

    导语: kotlin 标准库中, run, let, with, apply, also 实现解读 在看kotlin代码时, 可能会看到let, run这样的函数调用, 最早接触的时候, 我也弄不清楚其中差异...kotlin中, run, let, with, apply, also, 都是标准库的函数, 它的实现可以直接在IDE上跳转看到, 也可以在这里看: Standard.kt 看这些函数的实现, 会发现它们非常短...为什么说是混合: let的函数参数block中, 对应的上下文this和第一个run函数是一致的 let和第二个run函数一样是一个extension函数, 但是它的block参数支持一个参数, 就是任意类型..., let的实现又非常相似 apply和T.run的block参数的上下文一致 also和T.let的block参数的上下文一致 只是返回值和run/let有所区别...., 应该就对run, let, with, apply, also的差异完全明了 思考 在上边的实例代码中, T.run, T.apply, with(T)对应的block中, 怎么拿到TestDemo

    1.7K70

    程序eclipse下run和debug不一致问题

    如何发现的?     公司运营提出新需求,说系统不好用,于是开始优化。优化完上线后,偶发的发现程序输出的结果不对,于是赶紧下线回滚。把代码跑起来,eclipse里打断点,但结果是没问题啊。...如何排查的?     刚开始有点懵,这怎么搞?问了下度娘,五花八门说什么的都有。没办法,还是用最老的办法吧,每个一句代码,打印一次log,输出那一句代码用到的变量。...最后把debug下的输出复制到文件对比工具中,在把run下的输出复制到文件对比工具中。一对比,现原形了。     如何解决的?     现了原形,这就好办了。...然后第二次循环的时候,查询id为2,同样将结果存在一个map里,但这个时候,这个map竟然包含了第一次循环的时候,那个map里额外塞的参数!...这就影响了后续的程序判断,导致结果异常,而且打断点后这个问题又不见了!这时,想到度娘的一句话:Debug时内存会初始化,但运行时不会。难道第二次循环查询存储结果用到的是第一次的map?

    60620

    车辆路径规划中的Milk Run问题简介

    本文首先介绍什么是Milk Run,然后通过一些案例中的应用来说明这一模式在物流领域中的运用。...当然,这里并不是指送牛奶这一过程,而是指与这个过程有一些相似之处的物流配送方式,即高频次、小批量、定时性。...在未使用这种模式以前,通常是由供应商自行配送至生产厂房或者配送到仓储中心再进行进一步的配送。这两者有什么区别呢?...相关实践案例 上海大众与上海通用汽车公司都曾经有过相关的实践。...Milk Run在国外也有比较成功的应用案例,日本丰田公司在泰国建厂的时候就应用了这样的模式搭配JIT,通过循环取货来沟通泰国丰田装配厂、零部件供应商和第三方物流,为了使得这个系统有效且高效,丰田汽车公司在实践过程中提出了三个概念来应对实践过程中的问题

    2.6K30

    Linux的运行等级 (run level)与目标(target)

    在老的 Linux 发行版本中,系统运行分成不同的运行级别(run level),不同的级别所启动的服务搭配有所不同。...较新的 Linux 发行版本,比如 CentOS 7+,已经将运行级别替换成另一个新的概念--目标(target)。本文会为大家做一个比较,并对两者间的区别做以诠释。...运行级别 Run Level 大家都知道 Windows 有安全模式,它是Windows的最小模式,和普通模式相比,安全模式可以让用户更好地进行系统检测以及错误修复。...在 systemd 中,我们用 target 来模拟实现系统不同的运行级别。...系统启动默认的运行级别可以在 /etc/inittab 文件中进行配置,但在 CentOS 7 中,我们打开这个配置文件看一下: ?

    6.4K30

    Dockerfile 的 RUN 和 CMD、ENTRYPOINT

    一个Dockerfile中可以有许多个RUN命令。 CMD CMD命令是当Docker镜像被启动后Docker容器将会默认执行的命令。一个Dockerfile仅仅最后一个CMD起作用。...fi exec gosu postgres "$@" fi exec "$@" Docker Compose entrypoint 在docker compose中使用entrypoint指令的方法与在...例如,如果你运行docker run ,接下来,你运行的镜像的Dokcerfiles中CMD指令配置的命令将会被执行。...如下代码是同时使用这两个指令的一个例子: FROM ubuntu ENTRYPOINT ["top", "-b"] CMD ["-c"] Syntax best practices 与exec语法一样,...CMD要么用于给ENTRYPOINT提供默认参数,要么用于在容器中执行一个特定命令。 CMD可以通过容器启动命令docker run的参数来替换它。

    15K30

    Python asyncio 中 run_in_executor 的线程池阻塞问题与规避

    在把同步阻塞调用(比如requests、PIL图像处理、数据库驱动查询)塞进asyncio事件循环时,loop.run_in_executor几乎是条件反射的选择。...默认情况下,asyncio的run_in_executor如果不传executor,会使用事件循环自带的ThreadPoolExecutor,max_workers取的是min(32,os.cpu_count...(quick_pool,run_sql,sql)把慢调用和快调用隔离之后,快请求不会再被慢请求的队列拖累。...当线程池中的函数内部又调用了asyncio.run或操作了事件循环对象,会直接抛错或者让线程卡死。常见于在executor里调用一个内部用了asyncio.run的SDK封装。...如果确实需要强制中断,只能用进程隔离而不是线程隔离,这已经超出run_in_executor的适用范围。

    10810

    Kotlin中的let、with、run、apply、also常用场景

    //使用with后 with(bean){ var s="$name$age" } run 适用于let,with函数任何场景...因为run函数是let,with两个函数结合体,准确来说它弥补了let函数在函数体内必须使用it参数替代对象,在run函数中可以像with函数一样可以省略,直接访问实例的公有属性和方法,另一方面它弥补了...with函数传入对象判空问题,在run函数中可以像let函数一样做判空处理 apply 整体作用功能和run函数很像,唯一不同点就是它返回的值是对象本身,而run函数是一个闭包形式返回,返回的是最后一行的值...正是基于这一点差异它的适用场景稍微与run函数有点不一样。apply一般用于一个对象实例初始化的时候,需要对对象中的属性进行赋值。...also 适用于let函数的任何场景,also函数和let很像,只是唯一的不同点就是let函数最后的返回值是最后一行的返回值而also函数的返回值是返回当前的这个对象。一般可用于多个扩展函数链式调用

    2.2K10
    领券