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

【JavaSE专栏81】线程休眠,一种暂停线程执行的方法

当线程调用 Thread.sleep() 方法时,它会进入指定的时间段的休眠状态,暂停当前线程的执行,让出 CPU 资源给其他线程。...---- 一、什么是线程休眠 线程休眠是一种暂停线程执行的方法,当线程调用 Thread.sleep() 方法时,它会进入指定的时间段的休眠状态,暂停当前线程的执行,让出CPU资源给其他线程。...当线程休眠的时间到达时,线程会重新进入可执行状态,等待 CPU 调度执行。 在线程休眠期间,线程不会释放持有的任何锁,所以在使用休眠时要注意可能引发的线程同步问题。...I/O 操作阻塞:当线程执行 I/O 操作(如读写文件、网络通信)时,如果遇到阻塞情况(如文件读写未完成或网络数据尚未到达),线程会暂停执行并进入休眠状态,直到阻塞解除。...同步方法或代码块:当线程试图访问某个对象的同步方法或同步代码块时,如果该同步对象已经被其他线程占用,线程会进入阻塞状态并休眠,直到获取到同步对象的锁。

51340

【JAVA-Day81】 线程休眠: Java 中暂停线程执行的方法 ⏸️

在 Java 中,可以通过 Thread.sleep() 方法来实现线程休眠。当一个线程调用 sleep() 方法后,它会进入休眠状态,并释放 CPU 资源,直到指定的时间到达或者被其他线程中断。...二、线程什么情况下会休眠 ❓ 线程通常会在以下几种情况下进入休眠状态: 当调用 Thread.sleep() 方法时,线程会主动进入休眠状态。...等待 I/O 操作完成:当线程执行 I/O 操作时(如读写文件、网络通信等),如果遇到了阻塞情况,线程会自动进入休眠状态,直到 I/O 操作完成或超时。...等待对象锁:当线程尝试获取一个对象的锁,但该锁已经被其他线程持有时,线程会进入阻塞状态,等待锁的释放。在等待锁的过程中,线程会进入休眠状态。...等待线程通知:当线程调用 wait() 方法时,它会进入等待状态,直到其他线程调用相同对象上的 notify() 或 notifyAll() 方法来唤醒它。

13710
  • 您找到你想要的搜索结果了吗?
    是的
    没有找到

    进程冻结

    1 什么是进程冻结 进程冻结技术(freezing of tasks)是指在系统hibernate或者suspend的时候,将用户进程和部分内核线程置于“可控”的暂停状态。...2 为什么需要冻结技术 假设没有冻结技术,进程可以在任意可调度的点暂停,而且直到cpu_down才会暂停并迁移。这会给系统带来很多问题: (1)有可能破坏文件系统。...系统休眠的理想状态是所有任务对休眠过程无感知,睡醒之后全部自动恢复工作,但是有些进程,比如某个进程需要所有cpu online才能正常工作,如果进程不冻结,那么在休眠过程中将会工作异常。...用户进程默认是可以被冻结的,借用信号处理机制实现;内核线程和work_queue默认是不能被冻结的,少数内核线程和work_queue在创建时指定了freezable标志,这些任务需要对freeze状态进行判断...,当系统进入freezing时,主动暂停运行。

    1.2K30

    【Java编程进阶之路 12】线程调度的艺术:sleep与wait方法的深入探讨

    1.3 线程暂停执行 当线程调用sleep方法时,它将进入TIMED_WAITING状态。在这段时间内,线程不会执行任何代码,也不会参与CPU调度。...当Java线程执行sleep时,它会通知JVM,JVM随后会请求操作系统将该线程从可运行状态移除,直到指定的睡眠时间过后再次将其加入到可运行队列。...以下是wait方法工作原理的详细分析: 5.1 进入等待状态 当线程执行到wait方法时,它首先会检查自己是否持有当前对象的监视器(即对象锁)。...wait方法要求调用它的线程必须持有对象的监视器锁(即对象锁)。当线程调用wait时,它会释放当前持有的对象锁,并进入等待状态。...6.3 线程状态 当线程调用sleep时,它会进入TIMED_WAITING状态,直到休眠时间结束或者被中断。

    1K10

    Linux进程学习【进程状态】

    前言 进程 只有被OS管理好了,才能发挥它的全部功效,而系统中存在多个 进程,OS无法做到面面俱到,因此为了更好的管理进程,OS把 进程 分成了几种状态:阻塞、挂起、运行、休眠等等,至于每种状态的应用场景是什么...不一定在 CPU 上运行 ️睡眠 S 睡眠 S 的本质就是 进程阻塞,表示此时进程因等待某种资源而暂停运行;睡眠 S 又称为可中断休眠,当 进程 等待时间过长时,我们可以手动将其关闭,应用卡死后强制关闭也是这个道理...休眠 D 进程的一个方法就是切断电源,此时进程是结束了,但整个系统也结束了 倘若存在 休眠 D 进程长时间运行,那么此时就表示系统离宕机不远了 不可休眠状态比较少见,一般出现于IO阻塞 用途: 使操作系统无法杀死该...进程,预防误杀现象 ️暂停 T 我们还可以使 进程 进入 暂停 T 状态 kill -19 PID 暂停进程 kill -18 PID 恢复进程 我们可以通过 kill -18 PID 使 进程...进程 在指定行暂停运行,此时 进程 处于 追踪暂停状态 t ️死亡 X 当进程被终止后,就处于 死亡 X 状态 死亡状态是无法在任务列表中观察到的,死亡 X 状态只是一个返回状态 ️僵尸 Z 与死亡状态相对应的还有一个

    23730

    探索Linux下进程状态 | 僵尸进程 | 孤儿进程

    当我们去掉printf后,进程始终都在运行状态里,所以最终查出来的状态是运行状态(R状态)。 休眠状态本质就是进程在等待“资源”就绪 当程序正在运行时,如果ctrl+c,进程被终止,称为可中断睡眠。...让进程结束暂停状态,继续运行:kill -18 进程pid 当我们使用gdb调试打断点时,遇到断点处就暂停,此时是t状态,这种场景是被追踪暂停。 D状态 D状态:Linux系统比较特有的一种进程状态。...Linux操作系统负责的是进程管理,文件系统等,整个操作系统管理系统软硬件资源,当系统中整个资源内存不足时,Linux操作系统有权杀掉进程来释放空间。...这么一看,操作系统、进程、磁盘好像都没有错,是制度的问题,当进程在向磁盘中写入数据时谁都不能将该进程干掉。于是D状态就诞生了。...当父进程结束后,它的子进程的父进程变成1号进程,即操作系统 将父进程是1号进程的进程叫做孤儿进程。 孤儿进程被1号i进程领养,当然要有进程回收喽。

    15010

    【Linux】深度解析Linux中的几种进程状态

    T停止状态(stopped): 可以通过发送 SIGSTOP 信号给进程来停止(T)进程。这个被暂停的进程可以通过发送 SIGCONT 信号让进程继续运行。...避免了进程向磁盘写入关键数据时,被操作系统杀掉的问题 4.T :停止状态(阻塞状态) 进程状态:让进程 暂停 (前台进程转为后台进程) 系统中有许多信号,在系统中都是宏定义而来 例如:9号信号SIGKILL...[PID] //PID对应进程由T状态进入S状态,后台进程变为前台进程 进程为什么需要暂停状态?...Z :僵尸状态(Linux特有状态) 处于僵尸状态的进程:僵尸进程 进程结束不会立刻释放,会等一小会 当一个进程在退出的时候,退出信息会由OS写入到当前退出进程的PCB中,可以允许进程的代码和数据空间被释放...OS必须维护这个推出进程的PCB结构 原因:在进程死亡时,操作系统 或者 父进程 需要知道进程退出的原因,因此它的PCB里的退出信息不会被释放 父进程或者OS读取后,PCB状态先被改成X死亡状态,才会被释放

    1.6K10

    wait()和sleep()的区别

    在等待期间,WaitThread会释放对 lock 对象锁的占有,并进入等待状态。...如果在等待期间,其他线程获得了相同对象锁并执行了关联的同步代码块,那么当notify()或notifyAll()方法被调用唤醒等待的线程时,等待线程会继续执行,但是可能无法立即执行等待之后的代码。...当一个线程通过调用wait()方法释放对象锁后,它进入了等待状态,并等待其他线程调用相同对象上的notify()或notifyAll()方法来唤醒它。...在这段等待的时间内,其他线程有机会获取对象锁,并执行与之关联的同步代码块。当调用notify()或notifyAll()方法来唤醒等待的线程时,被唤醒的线程会重新竞争对象锁。...当某个线程执行一些耗时操作,但在某些时候并不需要一直占用资源时,可以通过适当的休眠时间来减少 CPU 的占用,让其他线程有机会获得执行。

    59710

    【Linux】用三种广义进程状态 来理解Linux的进程状态(12)

    挂起状态的本质 :操作系统把在内存中的进程(代码和数据)置换到磁盘中(SWAP分区) 操作系统会优先挂起阻塞的进程,因此也叫: 阻塞挂起 这种挂起状态,会造成系统效率变低 在设计操作系统时,会避免将用于置换...避免了进程向磁盘写入关键数据时,被操作系统杀掉的问题 4.T :停止状态(阻塞状态) 进程状态:让进程 暂停 (前台进程转为后台进程) 系统中有许多信号,在系统中都是宏定义而来 例如:9号信号SIGKILL...[PID] //PID对应进程由T状态进入S状态,后台进程变为前台进程 进程为什么需要暂停状态?...Z :僵尸状态(Linux特有状态) 处于僵尸状态的进程:僵尸进程 进程结束不会立刻释放,会等一小会 当一个进程在退出的时候,退出信息会由OS写入到当前退出进程的PCB中,可以允许进程的代码和数据空间被释放...OS必须维护这个推出进程的PCB结构 原因:在进程死亡时,操作系统 或者 父进程 需要知道进程退出的原因,因此它的PCB里的退出信息不会被释放 父进程或者OS读取后,PCB状态先被改成X死亡状态,才会被释放

    21810

    【JavaSE专栏76】三态和五态,线程的不同状态:新建、运行、状态、阻塞、等待、计时等待状态

    新建状态:当通过实例化 Thread 类或者创建 Runnable 接口的实现类对象时,线程处于新建状态。此时线程对象被创建,但还没有调用 start() 方法启动线程。...新建状态:当通过实例化 Thread 类或者创建 Runnable 接口的实现类对象时,线程处于新建状态。此时线程对象被创建,但还没有调用 start() 方法启动线程。...在等待状态下,线程会暂停执行,并且释放占用的锁资源,直到被其他线程唤醒。...运行状态:线程被启动后进入的状态,线程正在执行 run() 方法中的任务。在并发编程中,可以利用多个运行状态的线程同时执行不同的任务,提高系统的吞吐量和响应性。...例如,当线程需要访问共享资源时,如果该资源已经被其他线程占用,当前线程就会进入阻塞状态,直到资源被释放。

    27120

    【JAVA-Day76】Java线程解析:三态和五态

    当线程执行完毕、被阻塞、或者时间片用完时,线程将会离开运行状态。...当线程满足条件后,它会重新进入就绪状态,等待操作系统重新分配 CPU 资源,并且再次开始执行。...线程的五态指的是线程在操作系统中的五种状态,通常是新建、就绪、运行、阻塞和终止。在Java中,这些状态可以稍微不同,但是概念基本相同。 新建状态(New):当线程对象被创建时,它处于新建状态。...当线程处于就绪状态时,它等待操作系统分配 CPU 资源。 运行状态(Running):线程处于运行状态时,表示它正在执行其run()方法中的代码,并且正在使用 CPU 执行指令。...线程在这种状态下会暂停执行一段时间,然后根据指定的时间重新进入就绪状态。 线程如何从运行状态转变为终止状态?

    6710

    Android电源管理基础知识整理

    cpu的时钟源和hrtimer(高精度定时器模块(RTC))被关闭,所有进程(包括系统进程)被冻结,即进入上文所述的睡眠状态 idle进程是由原始进程(pid=0)在初始化init进程(pid=1)之后演变而来...Doze模式的限制 网络接入被暂停 系统忽略wake locks 标准的AlarmManager alarms(包括setExact()和setWindow())被延缓到下一个maintenance...当有setAlarmClock()的alarms启动时,系统会短暂退出Doze模式 系统不会扫描Wi-Fi 系统不允许sync adapters运行 系统不允许JobScheduler运行 结合上文分析的...WAKE_LOCK_IDLE 阻止系统从idle进程进入那些具有较大中断时延、禁用了较多中断源的低功耗状态(睡眠除外),持有该类型的锁,不影响系统进入睡眠状态。...当AP进入睡眠,有来电时,Modem(调制解调器)将唤醒AP;而我们平时所用的Alarm在硬件上则是依赖PMIC(电源管理芯片)中的RTC模块,所以即使AP断电进入睡眠,我们定的闹钟依旧会生效。 ?

    5.5K21

    并发编程Thread的常用API有哪些?

    但受系统计时器和调度程序的精度和准确性限制。线程不会失去任何monitor(监视器)的所有权。每个线程的休眠互不影响,Thread.sleep 只会导致当前线程进入指定时间的休眠。...差异:Thread.yield() 方法只是暂停当前线程的执行,让出CPU资源给其他线程,但不会进入阻塞状态。可能导致CPU进行上下文切换。...Thread.sleep() 方法会使当前线程暂停指定的时间,并进入阻塞状态,直到休眠时间结束或者被其他线程打断。Thread.sleep()具有较高的可靠性,可以确保至少暂停指定的时间。...join函数之后主线程和子线程的状态切换如下:当调用join()方法时,主线程会进入等待状态,直到子线程执行完毕后才会继续执行。...线程被中断:可以使用Thread类的interrupt()方法来中断线程。当一个线程调用另一个线程的interrupt()方法时,被调用线程会收到一个中断信号,并且中断状态会被设置为true。

    14210

    一张图搞清楚wait、sleep、join、yield四者区别,面试官直接被征服!

    写在开头 在线程的生命周期中,不同状态之间切换时,可以通过调用sleep()、wait()、join()、yield()等方法进行线程状态控制,针对这一部分知识点,面试官们也会做做文章,比如问你这些方法的作用以及之间的区别...(图片可保存常看哈) sleep() sleep()是Thread类中的一个静态本地方法,通过设置方法中的时间参数,使调用它的线程休眠指定时间,线程从RUNNING状态转为BLOCKED状态,这个过程中会释放...(); } 为什么sleep()放在Thread类中 答:因为sleep是线程级别的休眠,不涉及到对象类,只是让当前线程暂停,进入休眠状态,并不释放同步锁资源,也不需要去获得对象锁。...wait() wait() 是Object类的成员本地方法,会让持有对象锁的线程释放锁,进入线程等待池中等待被再次唤醒(notify随机唤醒,notifyAll全部唤醒,线程结束自动唤醒)即放入锁池中竞争同步锁...wait() 方法放弃持有的对象锁,进入等待队列,当该对象被调用 notify() / notifyAll() 方法后才有机会竞争获取对象锁,进入运行状态。

    1.3K00

    进阶Java多线程

    因为使用sleep方法之后,线程是进入阻塞状态的,只有当睡眠的时间结束,才会重新进入到就绪状态,而就绪状态进入到运行状态,是由系统控制的,我们不可能精准的去干涉它,所以如果调用Thread.sleep(...yield()方法只是让当前线程暂停一下,重新进入就绪的线程池中,让系统的线程调度器重新调度器重新调度一次,完全可能出现这样的情况:当某个线程调用yield()方法之后,线程调度器又将其调度出来重新进入到运行状态执行...实际上,当某个线程调用了yield()方法暂停之后,优先级与当前线程相同,或者优先级比当前线程更高的就绪状态的线程更有可能获得执行的机会,当然,只是有可能,因为我们不可能精确的干涉cpu调度线程。...① sleep方法暂停当前线程后,会进入阻塞状态,只有当睡眠时间到了,才会转入就绪状态。...,线程获取到cpu时间片时执行的具体逻辑 yield() 是 线程的礼让,使得获取到cpu时间片的线程进入就绪状态,重新争抢时间片 sleep(time) 是 线程休眠固定时间,进入阻塞状态,休眠时间完成后重新争抢时间片

    39220

    windows 线程

    用进程句柄调用TerminateProcess 当线程终止时,线程对象的状态会变为有信号,线程状态码会由STILL_ACTIVE改为线程的退出码,可以用GetExitThreadCode得到推出码,...另外可以使用Sleep函数使线程休眠一段时间后再启动,这个填入的时间只是一个参考值,并不是填入多少,就让线程暂停多久,比如说我们填入10ms,这个时候当线程真正陷入到休眠状态时CPU可能执行其他线程去了...但是在程序中不要依赖这个值来判断线程的执行顺序,这个值对于系统来说只是一个参考值,当我们的线程进入到队列中时,系统会动态的调整它的优先级,如果某个进程由于优先级的问题长时间没有运行,系统可能会提高它的优先级...线程可警告状态与异步函数 在程序中可以通过一些方法使线程暂停,如使用SleepEx,Wait族的函数(是以Wait开始并且以Ex结尾的函数)可以使线程进入一种可警告状态,这种状态本质上是暂停当前线程,保存当前线程环境...这些异步函数有自己的队列称为异步函数队列,当线程调用这些暂停或者等待的函数时,进入休眠状态,系统会保存当前线程环境,并从异步函数队列中加载异步函数,利用当前的线程环境继续运行,等到休眠时间到达后系统恢复之前保存的环境

    1.7K20

    【Linux】进程理解与学习(Ⅱ)

    (当然也存在因为进程优先级而导致的插队情况,后面会讲) 挂起是一种特殊的阻塞,pcb不被cpu调度,os会将数据与代码暂存在磁盘,等pcb进入运行队列等待调度时,再将数据与代码预加载到内存。...(所以我们有时可能会发现多个进程处于R状态,也不足为奇,这不是指它们同时被调度,而是指它们都处在运行队列,等待被cpu调度) 可中断休眠状态(S) 正如上面的图片所示,我们看到S状态是因为程序的pcb99%...(这种状态一般很难看到) 暂停状态(T) 暂停状态顾名思义就是让该进程暂停,我们可以通过指令kill -19 pid的指令来暂停该进程。输入指令kill -18 pid可以使该进程继续运行。...暂停状态实际上也是阻塞(要等待你发出指令继续运行) 僵尸状态是指子进程退出时,退出结果没有被父进程读取,子进程就会保持僵尸状态,直到父进程读取返回结果,才彻底结束。...1号进程实际上就是操作系统 答:父进程退出,子进程被操作系统领养(通过让子进程的父进程变成1号进程),此时的子进程就是孤儿进程。被领养是为了读取子进程的退出结果。

    59330

    【Linux系统编程】进程状态

    当一个进程请求某个资源时,如果资源当前不可用,操作系统会将该进程标记为阻塞状态,并将其对应的 PCB(task_struct) 移动到相应资源的等待队列后面。...2.2 挂起 那下面我们再来了解一下挂起 还是通过一个例子给大家讲解: 假设现在有一个下载任务因为断网进入了阻塞状态 而此时呢操作系统的内存资源又特别紧张,那此时呢操作系统可能会做这样的事情,...T暂停状态(stopped) T暂停状态呢其实也是一种阻塞状态: 可以通过发送 SIGSTOP 信号给进程来暂停(T)进程。这个被暂停的进程可以通过发送 SIGCONT 信号让进程继续运行。...,除了T之外: 还有一个t——追踪暂停状态 那其实我们GDB调式程序的是时候,如果打了断点,程序在断点处停下来,此时程序就会停止执行进入t状态 我们来演示一下: 那首先Makefile里面我们要加一个...所以,为了方便子进程退出后父进程或操作系统获取该进程的退出结果,Linux进程退出时,进程一般不会立即死亡,而是要维持一个Z状态即——僵尸状态。 等这个进程真正被回收了,它的状态就会变成X死亡状态。

    22310

    【Linux】从零开始认识进程 — 中篇

    T停止状态(stopped): 可以通过发送 SIGSTOP 信号给进程来停止(T)进程。这个被暂停的进程可以通过发送 SIGCONT 信号让进程继续运行。...通过刚刚的证明,说明了: S 休眠状态就是CPU在等待“资源”就绪。 该休眠成为可中断睡眠,随时可以被外界唤醒。 代表子啊前台运行,在./ 可执行程序 后加&会在后台运行,就不带加号了。...来看演示: 这样直观就可以看到暂停状态了。 这个 t 暂停状态多在gdb调试里常见,我们俗称的断点就是做到使进程暂停的作用。即调试暂停 感兴趣可以自行查看哦。...当进程退出并且父进程(使用wait()系统调用)没有读取到子进程退出的返回代码时就会产生僵死(尸)进程 僵死进程会以终止状态保持在进程表中,并且会一直在等待父进程读取退出状态代码。...所以,只要子进程退出,父进程还在运行,但父进程没有读取子进程状态,子进程进入Z状态 这个状态类似有人受害,被抛尸荒野,警察一定会封锁现场,法医进行甄别,最后是家属来准备后事。

    10210
    领券