博客
关于我
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/

你可能感兴趣的文章
poj3045 Cow Acrobats(二分最大化最小值)
查看>>
poj3061 Subsequence(尺取法)
查看>>
poj3074 DLX精确覆盖
查看>>
poj3252(组合数)
查看>>
Qt笔记——QToolBox开发简易QQ聊天界面
查看>>
poj3307
查看>>
Qt笔记——QString与隐式共享、MVC架构
查看>>
Qt笔记——QSemaphore处理生产者/消费者模式
查看>>
Qt笔记——QMutex&QWaitCondition处理生产者消费者模式
查看>>
Qt笔记——QLable+QPixmap图片缩放踩坑
查看>>
Qt笔记——foreach与forever
查看>>
QT程序怎么挪到Linux下,linux+Qt程序如何打包发布
查看>>
Qt知识:视图框架QGraphicsWidget详解
查看>>
SpringBoot中项目启动及定时任务缓存数据库常用数据至内存变量并转换后高频调用
查看>>
Qt知识: 画刷风格
查看>>
QT的OpenGL渲染窗QOpenGLWidget Class
查看>>
QT的C++程序加载动态链接库DLL(Linux下是so)的方式
查看>>
QT界面操作1:如何跟踪鼠标位置?
查看>>
Qt环境搭建(Visual Studio)
查看>>
QT点击"X"按钮,调用closeEvent()函数来实现调用特定事件(附:粗略介绍QT的信号与槽的使用方法)...
查看>>