首页 > 其他分享 >sleep()、wait()、join()、yield()之间的的区别

sleep()、wait()、join()、yield()之间的的区别

时间:2024-06-03 13:28:29浏览次数:20  
标签:join yield sleep 线程 方法 wait

这里提到的 sleep()、wait()、join() 和 yield() 是多线程编程中常用的几个方法,它们之间有一些区别:

1. sleep():
- sleep() 方法是 Thread 类的静态方法,用于让当前线程暂停执行指定的时间。
- 调用 sleep() 方法时,当前线程会暂停执行,但不会释放对象锁。
- sleep() 只会暂停当前线程的执行,不会影响其他线程的执行。在指定时间过后,线程会重新进入就绪状态,并尝试再次获取CPU执行权。
- 可以用来模拟等待或阻塞的情况。

2. wait():
- wait() 是 Object 类中的实例方法,用于让当前线程释放对象锁,并进入等待状态。
- 当调用 wait() 方法时,当前线程会暂停并释放对象锁,直到其他线程调用 notify() 或 notifyAll() 方法来唤醒它,或者等待的时间到达。
- wait() 方法必须在同步块或同步方法中调用,否则会抛出 IllegalMonitorStateException 异常。
- 可以用来实现线程间的协作和同步。

3. join():
- join() 方法是 Thread 类的实例方法,用于让一个线程等待另一个线程执行完毕。
- 当一个线程调用另一个线程的 join() 方法时,当前线程会被阻塞,直到另一个线程执行完毕。
- join() 可以用来实现线程的顺序执行。

4. yield():
- yield() 方法是 Thread 类的静态方法,用于提示调度器当前线程愿意放弃当前的 CPU 执行权。
- 调用 yield() 方法时,当前线程会让出 CPU 执行权,让其他具有相同优先级的线程有机会执行。
- yield() 方法没有释放对象锁,只是提示调度器让出 CPU 执行权。

总结:
- sleep() 是让当前线程暂停执行一段时间,不释放对象锁;
- wait() 是让当前线程释放对象锁,并进入等待状态;
- join() 是让一个线程等待另一个线程执行完毕;
- yield() 是提示调度器放弃当前的 CPU 执行权,让其他线程执行。
 

标签:join,yield,sleep,线程,方法,wait
From: https://blog.csdn.net/LIUCHANGSHUO/article/details/139412263

相关文章

  • JAVA使用ForkJoinPool实现子任务拆分进行数值累加代码示例
      SumTask.javaimportjava.util.concurrent.RecursiveTask;/***定义任务和拆分逻辑*RecursiveTask<Long>这个是有返回值的*如果不需要返回值可以用RecursiveAction*/publicclassSumTaskextendsRecursiveTask<Long>{/***累加的开始值......
  • feapder通过selenium爬取网页数据-用到yield关键字可循环爬取
    importrandomimporttimeimportfeapderfromfeapder.utils.webdriverimportWebDriverfromparselimportSelectorfromfeapder.db.mysqldbimportMysqlDBfromselenium.webdriver.common.byimportByclassTestRender(feapder.AirSpider):db=MysqlDB()__cust......
  • C++:细谈Sleep和_sleep
    ZINCFFO的提醒还记得上上上上上上上上上上上上上上上上上上(上的个数是真实的)篇文章吗?随机应变——Sleep()和_sleep()但在ZINCFFO的C++怪谈-02中:我不喜欢Sleep......奤?媜煞鷥!整活!Sleep()是个什么东东?    Sleep()在windows.h和graphics.h里面都有。voidSlee......
  • 计算机系统结构之FORK和JOIN
    程序语言中用FORK语句派生并行任务,用JOIN语句对多个并发任务汇合。FORK语句的形式为FORKm,其中m为新领程开始的标号。JOIN语句的形式为JOINn,其中n为并发进程的个数。例1:给定算术表达式Z=E+A*B*C/D+F经并行编译得到如下程序:S1G=A*BS2H=C/DS3I=G*HS4J=E+FS5Z=I+J......
  • MapReduce学习之MapJoin案例实现
    MapReduce学习之MapJoin案例实现1.当前main方法所在的入口类packagecom.shujia.mr.mapJoin;importcom.shujia.mr.reduceJoin.ReduceJoin;importcom.shujia.mr.reduceJoin.ReduceJoinMapper;importcom.shujia.mr.reduceJoin.ReduceJoinReducer;importorg.apache.......
  • 线程简述:协程、抢占式、sleep、wait、interrupt,优雅中断线程,线程通信等
    思维导图在此:java线程简述-CSDN博客1、线程与协程协程-->线程-->进程,协程最小协程:用户态,go语言线程:用户态、内核态都有。cpu调度的最小单位。是工人,从进程获取资源,多个线程共享进程的资源。进程:内核态。操作系统调度资源的最小单位。是资源管家。2、调度机制协同式。......
  • spark sql中的几种数据库join
    一、连接类型:InnerJoin:内连接;FullOuterJoin:全外连接;LeftOuterJoin:左外连接;RightOuterJoin:右外连接;LeftSemiJoin:左半连接;LeftAntiJoin:左反连接;NaturalJoin:自然连接;Cross(orCartesian)Join:交叉(或笛卡尔)连接。二、crossjoin的例子:WITH......
  • [SQL DRIVEN] GetExistingLocalJoinPath
    ThefollowingsqlstatementswilltriggercallingfunctionGetExistingLocalJoinPath.setupCREATEEXTENSIONpostgres_fdw;CREATESERVERforeign_serverFOREIGNDATAWRAPPERpostgres_fdwOPTIONS(host'127.0.0.1',dbname'postgres',por......
  • 浅析AOP中的JoinPoint的使用
    JoinPoint可以让我们获取到哪些信息JoinPoint接口提供了多个方法,允许我们在切面中获取与连接点(即目标方法执行点)相关的信息。以下是一些常用的方法,以及它们能够提供的信息:getArgs():获取目标方法的参数列表。这些参数是在方法调用时传递给方法的实际参数。getSignature()......
  • sleep() 和 wait() 有什么区别?
    sleep是线程类(Thread)的方法,导致此线程暂停执行指定时间,给执行机会给其他线程,但是监控状态依然保持,到时后会自动恢复。调用sleep不会释放对象锁。wait是Object类的方法,对此对象调用wait方法导致本线程放弃对象锁,进入等待此对象的等待锁定池,只有针对此对象发出notify方法(或noti......