首页
学习
活动
专区
工具
TVP
发布
精选内容/技术社群/优惠产品,尽在小程序
立即前往

线程什么时候会挂起挂起的函数?

线程在以下情况下会挂起挂起的函数:

  1. 等待I/O操作:当线程需要等待某个输入/输出操作完成时,它会调用一个挂起的函数来暂停自己的执行,直到操作完成并返回结果。
  2. 等待锁:当线程需要获取一个被其他线程持有的锁时,它会调用一个挂起的函数来暂停自己的执行,直到锁被释放并且线程成功获取到锁。
  3. 等待条件变量:当线程需要等待某个特定条件的发生时,它会调用一个挂起的函数来暂停自己的执行,直到条件满足。
  4. 睡眠:线程可以主动调用一个挂起的函数来进入睡眠状态,以便在一定时间后被唤醒。
  5. 被其他线程中断:当一个线程被其他线程中断时,它会调用一个挂起的函数来暂停自己的执行,以便处理中断事件。

线程挂起的函数包括但不限于以下几种:

  • Java中的Thread.sleep():使当前线程暂停执行指定的时间,单位为毫秒。
  • C++中的std::this_thread::sleep_for():使当前线程暂停执行指定的时间,可以指定时间的单位。
  • Python中的time.sleep():使当前线程暂停执行指定的时间,单位为秒。
  • C#中的Thread.Sleep():使当前线程暂停执行指定的时间,单位为毫秒。

需要注意的是,线程挂起的函数可能会导致线程的上下文切换和性能损耗,因此在使用时需要谨慎考虑。

页面内容是否对你有帮助?
有帮助
没帮助

相关·内容

进程挂起状态详细分析方法_线程挂起

但是由于磁盘I/O一般是系统中最快I/O(相对于磁带或者打印机I/O),所以交换通常会提高性能。 现在有两种进程模型,一种是包含单挂起模型,一种是包含两个挂起模型。...阻塞挂起->就绪挂起:如果等待事件发生了,则处于阻塞/挂起状态进程可转换到就绪/挂起态。注意,这要求操作系统必须能够得到挂起进程状态信息。...就绪/挂起->就绪:如果内存中没有就绪态进程,操作系统需要调入一个进程继续执行。此外,当处于就绪/挂起状态进程比处于就绪态任何进程优先级都要高时,也可以进行这种转换。...通俗说,就是挂起挂起,不光要考虑为进程让出空间,不光要考虑是否就绪,还要考虑进程优先级。...挂起其他用途:到目前为止,挂起进程概念与不在内存中进程概念是等价。一个不再内存中进程,不论是否在等待一个事件,都不能立即执行。

1.7K30

【Kotlin 协程】协程挂起和恢复 ① ( 协程挂起和恢复概念 | 协程 suspend 挂起函数 )

文章目录 一、协程挂起和恢复概念 二、协程 suspend 挂起函数 一、协程挂起和恢复概念 ---- 函数 最基本操作 是 : 调用 call : 通过 函数名或函数地址 调用函数 ; 返回..., 在子线程中执行异步任务后 , 马上执行后续代码 , 只是相当于 普通线程操作 ; 协程作用就是 可以 顺序地执行 异步任务 和 主线程任务 , 其执行顺序按照代码顺序执行 ; 挂起 函数...fun asynTask() { // 子线程中执行异步任务 } public fun updateMain() { // 主线程更新 UI } 分析上述 挂起 suspend 函数 Test(...) 调用流程 : 执行 suspend fun Test() 函数时 , 该函数放入 应用主线程 栈帧 中 , ( 此时栈帧内容 : Test 函数 , 左侧是栈底 ) 继续执行内部 suspend...: Test 函数 , 左侧是栈底 ) 栈帧中恢复 suspend fun Test() 函数中 , 继续执行函数后半部分 updateMain() , 执行主线程更新 UI 内容 ; ( 此时栈帧内容

1.6K40
  • 在 View 上使用挂起函数

    挂起函数 (Suspending functions) 是协程基础组成部分,它允许我们以非阻塞方式编写代码。...这种特性非常适用于我们处理 Android UI,因为我们不想阻塞主线程,阻塞主线程带来性能上问题,比如: jank。...又由于我们已经为挂起函数中添加了对取消操作支持,所以 lifecycleScope 被取消时,所有与之关联协程都会被清除。...这就是使用挂起函数等待方法执行来封装回调基本使用了。 组合使用 到这里,您可能有这样疑问,"看起来不错,但是我能从中收获什么呢?"...通过把不同异步操作转换为协程挂起函数,我们获得了简洁明了地编排它们能力。 我们还可以更进一步...

    2.3K30

    【Kotlin 协程】协程挂起和恢复 ② ( 协程挂起线程阻塞 对比 )

    文章目录 一、协程挂起线程阻塞 对比 1、协程挂起 2、线程阻塞 3、挂起和阻塞对 UI 影响 4、挂起分析 一、协程挂起线程阻塞 对比 ---- 挂起是协程中概念 , 只能在协程中使用...; 阻塞是线程概念 , 可以在主线程和子线程中使用 ; 1、协程挂起 协程 挂起 操作 : 在协程中使用 delay 函数 , 挂起 20 秒时间 , 然后 20 秒后更新 UI ; delay...函数挂起 suspend 函数 ; // 创建协程 GlobalScope.launch(Dispatchers.Main) { delay(20000) // 主线程更新 UI...主线程更新 UI") 3、挂起和阻塞对 UI 影响 协程 挂起 操作 不会出现 阻塞 UI 刷新情况 , 挂起 20 秒不影响 UI 刷新显示 ; 但是如果将主线程阻塞 , UI 不再刷新 , 会出现..., ANR 崩溃异常 ; 4、挂起分析 协程中有挂起操作 , 会将挂起状态保存 , 同时协程停止执行 , 等待挂起函数执行完毕后 , 协程继续执行 ; 相当于阻塞是协程 , 不会阻塞主线程 ;

    1.7K20

    在 View 上使用挂起函数 | 实战

    本文是探索协程如何简化异步 UI 编程系列第二篇。第一篇侧重理论分析,这一篇我们通过实践来说明如何解决实际问题。如果您希望回顾之前内容,可以在这里找到——《在 View 上使用挂起函数》。...,并且可能无法正常运行,旨在说明回调极大增加 UI 编程复杂度。...使用协程解决问题 在前一篇文章中,我们已经学习了如何使用挂起函数封装回调 API。...新挂起函数隐藏了所有复杂操作,从而得到了一个线性调用方法序列,让我们来探究更深层次细节......对于所有 API,将回调、监听器、观察者封装为挂起函数方式基本相同。希望您此时已经能感受到我们文中例子重复性。那么接下来还请再接再厉,将您 UI 代码从链式回调中解放出来吧!

    1.4K30

    聊聊挂起与唤醒线程LockSupport工具类

    ,提供了最基本线程阻塞和唤醒功能,是创建锁和其他同步类基础,你会发现,AQS中阻塞线程和唤醒线程地方,就是使用LockSupport提供park和unpark方法,比如下面这段: //...挂起线程 private final boolean parkAndCheckInterrupt() { LockSupport.park(this); return...下面演示park()方法和unpark()方法使用: 在thread线程中调用park()方法,默认情况下该线程是不持有许可证,因此将会被阻塞挂起。...A A end park blocker作用 JDK1.6开始,一系列park方法开始支持传入blocker参数,标识当前线程在等待对象,当线程在没有持有许可证情况下调用park方法而被阻塞挂起时...或 当前锁已经被其他线程获取,则调用park方法挂起自己 while (waiters.peek() !

    17130

    进程执行和挂起

    进程实现,其实和我们平时写代码时候一样,比如我们要表示一个东西,我们定义一个数据结构。进程也不例外。所以进程本质就是一个数据结构,他保存了一系列数据。...2 进程执行 当系统创建一个进程之后,设置cs:ip寄存器值,如果是fork,则ip就是fork函数后面的语句ip地址。如果是execute则ip地址由编译器指定。...这些概念我们平时听得比较多,现在我们来看看他是实现是怎样。进程挂起,或者说阻塞分为两种。 1 主动挂起。通过sleep让进程间歇性挂起。sleep原理之前有分析过,就不再分析。...大概原理 就是设置一个定时器,到期后唤醒进程。 修改进程为挂起状态,等待唤醒。 2 被动挂起。 被动挂起场景比较多,主要是进程申请一个资源,但是资源没有满足条件,则进程被操作系统挂起。...,然后把链表头指针指向当前进程, 然后切换到其他进程执行,当被wake_up唤醒时候,wake_up唤醒链表第一个 睡眠节点,因为第一个节点里保存了后面一个节点地址

    1.7K10

    python多线程编程(2): 线程创建、启动、挂起和退出

    如上一节,python threading.Thread类有一个run方法,用于定义线程功能函数,可以在自己线程类中覆盖该方法。...而创建自己线程实例后,通过 Thread类start方法,可以启动该线程,交给python虚拟机进行调度,当该线程获得执行机会时,就会调用run方法执行线程。...上面的代码中只能保证每个线程都运行完整个run函数,但是线程启动顺序、run函数中每次循环执行顺序都不能确定。...此外需要注意是: 1.每个线程一定会有一个名字,尽管上面的例子中没有指定线程对象name,但是python自动为线程指定一个名字。 2.当线程run()方法结束时该线程完成。 3....无法控制线程调度程序,但可以通过别的方式来影响线程调度方式。 上面的例子只是简单演示了创建了线程、主动挂起以及退出线程。 下一节,将讨论用互斥锁进行线程同步。

    1.3K60

    【Kotlin 协程】协程启动 ③ ( 协程组合并发 | 挂起函数串行执行 | 协程组合并发执行挂起函数 )

    文章目录 一、挂起函数串行执行 二、协程组合并发执行挂起函数 一、挂起函数串行执行 ---- 在协程体中 , 连续使用多个挂起函数 , 这些函数执行是顺序执行 , 挂起函数 1 执行完毕后 , 才执行..., 可以将 主线程 包装成 协程 // measureTimeMillis 函数用于测量内部代码块执行时间, 单位毫秒 ms val time =...577 ms 二、协程组合并发执行挂起函数 ---- 如果想要两个挂起函数并发执行 , 并且同时需要两个函数返回值 , 则使用 async 协程构建器 , 启动两个协程 , 在协程体中执行两个并发函数..., 可以将 主线程 包装成 协程 // measureTimeMillis 函数用于测量内部代码块执行时间, 单位毫秒 ms val time =..., 耗时 355 ms , 达到了并发执行减少执行时间目的 ; 00:18:50.081 I 两个返回值相加 3 00:18:50.081 I 挂起函数执行耗时 355 ms

    67220

    LockSupport实现线程挂起和唤醒——深入浅出原码分析

    这里咱们还是通过对比来介绍LockSupport简单。 在没有LockSupport之前,线程挂起和唤醒咱们都是通过Objectwait和notify/notifyAll方法实现。...for (int i = 0; i < 10; i++) { //——步骤二 sum += i; } //——这里阻塞...所以线程间也不需要维护一个共享同步对象了,实现了线程解耦。 ②unpark函数可以优先于park调用,所以不需要担心线程执行先后顺序。...setBlocker(t, blocker); //——设置该线程blocker变量 UNSAFE.park(false, 0L); //——挂起线程 setBlocker(...因为两次unpark调用效果跟一次调用一样, 只能让线程B第一次调用park方法不被阻塞,第二次调用依旧阻塞。

    83450

    Flowable 流程实例挂起(暂停)与激活

    松哥最近正在录制 TienChin 项目视频~采用 Spring Boot+Vue3 技术栈,里边涉及到各种好玩技术,小伙伴们来和松哥一起做一个完成率超 90% 项目,戳戳戳这里-->TienChin...---- 今天来和小伙伴们聊一聊流程挂起和激活。 这块实际上涉及到两部分内容: 流程定义挂起和激活。 流程实例挂起和激活。 一个定义好流程,如果挂起了,那么就无法据此创建新流程。...执行完成之后,这个流程实例就被挂起了。流程实例被挂起,涉及到两个地方: 流程执行实例被挂起。 流程 Task 被挂起。...同时,流程实例 Task 其实也被挂起了,即 ACT_RU_TASK 表中与之对应任务被挂起了,如下: 可以看到,SUSPENSION_STATE_ 字段值为 2,表示这 Task 也被挂起了。...对应 SQL 如下: 好啦,挂起与激活就先聊这么多,下篇文章继续~ ---- 松哥最近正在录制 TienChin 项目视频~采用 Spring Boot+Vue3 技术栈,里边涉及到各种好玩技术

    1.4K20

    案例:log file sync等待引起RAC 挂起(HANG)

    (关于LGWR进程工作方式我们在之后【LGWR进程工作方式(通知方法)】中进行介绍) 日志文件(dia0) 我们知道11g以后版本中,Oracle增加了一个叫DIA0进程,用于检测挂起(HANG...通常来讲,当系统负荷比较低时,Post/wait方式工作更好;当系统负荷比较高时,Polling方式则会工作更好。...原因 前台进程在等待’log file sync’时,执行kcrf_commit_force()函数,并使用”redo write broadcast ack time”平均值来判断他们轮询睡眠时间...),前台进程依据错误计算结果,改变轮询睡眠时间,导致部分前台进程处于睡眠状态不能够正常结束,从而表现为过长时间“log file sync”等待。...根据前面信息收集内容,本次用户现象发生时基本满足了上面所有的条件; (虽然Short Stack中包含函数是cold_kcrf_commit_force(),但从函数功能来看,基本可以等同于kcrf_commit_force

    1.5K21

    关于请求被挂起页面加载缓慢问题追查

    前端同学们开组提及此事,如何解决慢问题。 最致命是:偶发!你不能准确知道它抽风时间点,无法在想要追查问题时候必现它。...杀毒软件 后面会看到,在追查错误号ERR_CONNECTION_RESET时引出了杀毒软件可能导致Chrome工作不正常情况,但这个可能也在稍后被排除人。...eroman 同学指出了这么一个事实: 浏览器对一个资源发起请求前,先检查本地缓存,此时这个请求对该资源对应缓存读写是独占。...但最后针对该问题进行修复代码提交却是在今年6月份,2014年6月24日,提交时间摆在那里我会乱说? ? 于是好奇为什么拖了这么久,遂跟了一下该问题下面的回复看看发生了什么。简直惊呆了。...但什么时候会发生重置,如何引起。 上文列出了三种情况。

    4.6K20

    进程基本状态及转换和阻塞及挂起理解【转】

    挂起状态:由于IO速度慢于CPU运算速度,经常出现CPU等待I/O情况。这时OS需要将主存中进程对换至外存。在进程行为模式中需要增加一个新挂起(suspend)状态。...静止就绪:指进程被对换到辅存时就绪状态,是不能被直接调度状态,只有当主存中没有活跃就绪态进程,或者是挂起态进程具有更高优先级,系统将把挂起就绪态进程调回主存并转换为活跃就绪。...阻塞及挂起理解 挂起是一种主动行为,是把一个进程从内存转到外存,而阻塞则是一种被动行为(并不绝对,看个人理解),是在等待事件或资源时任务表现。...这里如果佐料没有在桌子上就类似进入阻塞态,而如果有就相当于进入就绪态,但是锅里已经被占用了,需要等待一会儿)至于优先级高低,也可类比有些菜是为了其他菜做铺垫(举个例子:在川菜里面,回锅肉和炒白菜,一般家庭优先做回锅肉...,因为当做回锅肉时,炒出许多猪油,而这些有可以用来炒白菜,这样炒白菜不仅好吃,而且也节约了许多油。))

    2K40

    FreeRTOS例程2-任务挂起恢复与使用中断遇到坑!

    任务挂起简单点理解就是现在不需要执行这个任务,让它先暂停,就是挂起。恢复就是从刚才挂起状态下继续运行。...) 参数: xTaskToSuspend:需要挂起任务句柄 总结: 这几个函数用起来还是很简单,只需要传入任务句柄即可。...注意,任务挂起是没有FromISR版本,所以在中断中貌似就不可以使用任务挂起了。 程序验证 在上个例程基础上,增加一个按键检测任务和外部中断函数,用来测试任务挂起与恢复。...注意,中断程序中没有使用延时消抖,所以按下KEY0,从中断恢复任务时,可能执行多次恢复,(1次挂起)多次恢复目前是没有什么影响。 注意事项(避免程序卡死)!!!...FreeRTOS维护单独线程和ISR API函数,以确保中断条目尽可能快速和简单。

    2.7K30

    【Kotlin 协程】协程中多路复用技术 ② ( select 函数原型 | SelectClauseN 事件 | 查看挂起函数是否支持 select )

    _clauses_指定多个挂起函数结果 * 在此选择调用[builder]范围内。...相反,每个可选择挂起函数都具有 * 对应挂起版本,可以与常规“when”表达式一起使用来选择一个 * 选项,如果没有选项可以立即选择,则执行默认(' else ')操作。...如果当前协程[Job]被取消或完成 * 函数挂起后,该函数立即恢复[CancellationException]。 * 有**立即取消保证**。...onSend 事件 ; 挂起函数 如果存在对应 SelectClauseN 事件 , 那么就可以使用 select 实现多路复用 ; 1、SelectClause0 事件代码示例 代码示例 : package...select ---- 如果查看某个挂起函数是否支持 select , 直接进入该函数源码 , 查看其是否定义了对应 SelectClauseN 类型 , 如查看 Channel#onSend 函数原型时

    1.1K20

    【Kotlin 协程】Flow 异步流 ① ( 以异步返回返回多个返回值 | 同步调用返回多个值弊端 | 尝试在 sequence 中调用挂起函数返回多个返回值 | 协程中调用挂起函数返回集合 )

    | 协程 suspend 挂起函数 ) 博客 ; 如果要 以异步方式 返回多个元素返回值 , 可以使用如下方案 : 集合 序列 Suspend 挂起函数 Flow 异步流 二、同步调用返回多个值弊端...} // 同步调用 " 返回 Sequence 序列 " 时 , 线程阻塞 sequenceFunction().forEach { // 遍历打印序列中内容...---- 尝试使用 挂起函数 kotlinx.coroutines.delay 进行休眠 , 这样在挂起时 , 不影响主线程其它操作 , 此时会报如下错误 ; Restricted suspending..., 该函数就会变成 SequenceScope 扩展函数 , SequenceScope 类中扩展函数是限制挂起 , 只要是 SequenceScope 中 , 如果要调用挂起函数 , 只能调用其已有的挂起函数...* 这些挂起扩展只能调用该特定接收器上其他成员或扩展挂起函数,并且不能调用任意挂起函数

    8.2K30

    Android面试题之Kotlin 协程挂起、执行和恢复过程

    挂起点:协程挂起位置,这个位置通常是代码中一个挂起点(suspend函数)。 调用栈:它对应当前执行协程堆栈帧,可以看作是对函数调用链保存。...协程挂起后切换到其他线程执行 当协程遇到挂起点(如 delay, await 等 suspend 函数)时,它会触发挂起机制,具体步骤如下: 3.1 挂起处理 当协程在挂起点被挂起时,当前函数状态和局部变量会被保存到...挂起函数会将 Continuation 对象传递给协程调度器。 3.2 挂起协程和释放线程 调度器暂停当前协程执行,把线程控制权交给调度器管理线程池或其他任务,从而释放当前线程。 4....Result.success(result)) 这时,协程恢复到挂起点之后代码继续正常执行。...调度器恢复协程到原线程 6.1 检查恢复环境 调度器检查协程需要恢复环境,特别是上下文中线程调度信息。如果协程需要恢复到特定线程(例如主线程),调度器安排该任务。

    15110
    领券