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

你可能感兴趣的文章
OSG学习:纹理映射(六)——灯光
查看>>
OSG学习:纹理映射(四)——三维纹理映射
查看>>
OSG:从源码看Viewer::run() 一
查看>>
OSI七层模型与TCP/IP四层与五层模型详解
查看>>
OSI七层模型的TCP/IP模型都有哪几层和他们的对应关系?
查看>>
OSM数据如何下载使用(地图数据篇.11)
查看>>
OSPF 四种设备角色:IR、ABR、BR、ASBR
查看>>
OSPF 学习
查看>>
OSPF 概念型问题
查看>>
SQL Server 存储过程分页。
查看>>
OSPF不能发现其他区域路由时,该怎么办?
查看>>
OSPF两个版本:OSPFv3与OSPFv2到底有啥区别?
查看>>
SQL Server 存储过程
查看>>
OSPF在大型网络中的应用:高效路由与可扩展性
查看>>
OSPF技术入门(第三十四课)
查看>>
OSPF技术连载10:OSPF 缺省路由
查看>>
OSPF技术连载13:OSPF Hello 间隔和 Dead 间隔
查看>>
OSPF技术连载14:OSPF路由器唯一标识符——Router ID
查看>>
OSPF技术连载15:OSPF 数据包的类型、格式和邻居发现的过程
查看>>
OSPF技术连载16:DR和BDR选举机制,一篇文章搞定!
查看>>