博客
关于我
sleep()和wait()有什么区别?线程的run()和start()有什么区别?
阅读量:518 次
发布时间:2019-03-08

本文共 1085 字,大约阅读时间需要 3 分钟。

sleep()和wait()有什么区别?

Sleep()和wait()都是用来暂停线程执行的方法,但它们在功能和用途上有显著的区别。下面从几个方面对这两个方法进行比较:

  • 所在类不同:sleep()是Thread类的静态方法,而wait()是Object类的非静态方法。
  • 是否释放锁:sleep()不会释放线程所持有的锁,而wait()会释放所有相关的监літ權(monitor)。
  • 用途不同:sleep()主要用于暂停当前线程的执行,而wait()常用于线程之间的通信和等待特定的条件。
  • 用法不同:sleep()方法执行后,线程会自动苏醒到开始执行的位置,而wait()方法则会阻止线程继续执行,直到其他线程调用其它方法(如notify()或notifyAll())通知它。需要注意的是,wait()方法的超时版本(wait(long timeout))会在超时后自动苏醒。

Sleep()和wait()的主要区别在于是否拥有锁和它们的主要用途。使用sleep()并不涉及锁的机制,而wait()方法本质上是一个同步机制,会释放锁ClearColor, 所以在需要保持其他线程可以继续运行的情况下,应该使用wait()方法。

run()和start()有什么区别?

Run()和start()都是与线程相关联的方法,但它们在功能和作用上有明显的不同。下面从各个方面对这两个方法进行分析:

  • start()方法用于启动线程,run()方法负责线程的执行。启动线程需要调用start()方法,执行线程的实际功能则需要调用run()方法。
  • start()方法只能被调用一次,run()方法则可以重复调用。
  • start()方法的执行会立即创建线程并设置为就绪状态,但不会立即执行run()方法。在线程启动后,可以立即执行其他操作,而不需要等待run()方法的执行。而start()方法必须由线程外的某个线程调用,不能在当前线程内部调用start()方法,否则可能会导致死锁。
  • run()方法是相对独立的,如果直接调用run()方法,相当于是在当前线程中执行该方法代码,并不会同时多线程。start()方法则是最终启动线程的唯一方法,必须从线程外调用,并且线程启动后,必须通过run()方法来执行具体的线程功能。

在实际开发中,通常会通过调用start()方法来启动线程,而不是直接调用run()方法。因为start()方法负责线程的生命周期管理,比如线程的启动、执行以及在完成后自动终止。而run()方法只是线程的执行体,可以在必要时多次调用,但start()方法只能被调用一次。

转载地址:http://klanz.baihongyu.com/

你可能感兴趣的文章
OpenMMLab | 面向多样应用需求,书生·浦语2.5开源超轻量、高性能多种参数版本
查看>>
OpenMP 线程互斥锁
查看>>
OpenMV入门教程(非常详细)从零基础入门到精通,看完这一篇就够了
查看>>
OpenObserve云原生可观测平台本地Docker部署与远程访问实战教程
查看>>
openoffice使用总结001---版本匹配问题unknown document format for file: E:\apache-tomcat-8.5.23\webapps\ZcnsDms\
查看>>
views
查看>>
OpenPPL PPQ量化(2):离线静态量化 源码剖析
查看>>
OpenPPL PPQ量化(3):量化计算图的加载和预处理 源码剖析
查看>>
OpenPPL PPQ量化(4):计算图的切分和调度 源码剖析
查看>>
OpenPPL PPQ量化(5):执行引擎 源码剖析
查看>>
openpyxl 模块的使用
查看>>
OpenResty & Nginx:详细对比与部署指南
查看>>
openresty 前端开发入门六之调试篇
查看>>
OpenResty(nginx扩展)实现防cc攻击
查看>>
openresty完美替代nginx
查看>>
Openresty框架入门详解
查看>>
OpenResty(1):openresty介绍
查看>>
OpenResty(2):OpenResty开发环境搭建
查看>>
OpenResty(3):OpenResty快速入门之安装lua
查看>>
OpenResty(4):OpenResty快速入门
查看>>