线程阻塞状态和挂起状态的区别
时间: 2023-03-30 22:02:30 浏览: 155
线程阻塞状态和挂起状态的区别在于,线程阻塞状态是指线程因为等待某个条件而被暂停执行,而挂起状态是指线程被主动暂停执行,等待被恢复执行。在阻塞状态下,线程会一直等待条件满足后才能继续执行,而在挂起状态下,线程需要等待外部的恢复操作才能继续执行。
相关问题
java多线程阻塞状态和等待状态的区别
Java中的多线程可以处于不同的状态,其中阻塞状态和等待状态是两种常见的状态。它们的区别如下:
1. 阻塞状态
阻塞状态是指线程因为某种原因而暂时停止执行,等待一些条件满足后再继续执行。常见的阻塞情况有:
- 线程调用了sleep()方法,使得线程进入休眠状态;
- 线程调用了wait()方法,等待其他线程的通知;
- 线程调用了join()方法,等待另一个线程执行完毕;
- 线程试图获得一个锁,但是该锁已经被其他线程占用。
在以上情况下,线程都会进入阻塞状态,暂时停止执行。
2. 等待状态
等待状态是指线程在等待某个条件满足时,主动挂起自己的状态。在等待状态下,线程不会占用CPU资源,直到被其他线程唤醒或者等待时间超时才会继续执行。常见的等待情况有:
- 线程调用了wait()方法,等待其他线程的通知;
- 线程调用了park()方法,等待其他线程的唤醒;
- 线程调用了LockSupport.park()方法,等待其他线程的唤醒。
在以上情况下,线程都会进入等待状态,主动挂起自己。
下面有关RT-Thread操作系统的线程 状态转移的说法,罐误的量嘴一项20(5.0) A.线程任务已完成,不需要再使用CPU资源,线程转为终止态或死亡态。 B.线程在挂起态时,等到了需要的資源,状态 辖移为激活态。 C.就绪态的不同优先级的线程,优先级高者先进入就绪态。 D.运行态的线程需要资源而资源暂时不能获取,线程需要状态转移为阻塞态。
选项A、B、C都存在错误,选项D是正确的。
A. 线程任务完成后,应该由线程本身主动调用线程终止函数来退出,而不是直接转为终止态或死亡态。转为终止态或死亡态,可能会导致线程资源未被释放,从而出现内存泄漏等问题。
B. 线程在挂起态时,等到需要的资源后,状态应该转移为就绪态,而不是激活态。激活态在RT-Thread中没有定义。
C. RT-Thread中,就绪态的线程不是按照优先级高者先进入就绪态。实际上,就绪态的线程是按照时间片轮转算法进行调度的,每个线程的时间片长度与优先级有关,但不是按照优先级高低来分配的。
D. 运行态的线程需要资源而暂时不能获取时,线程需要进行状态转移,转为阻塞态,等待资源可用后再次进入就绪态,被调度器分配到CPU运行。
阅读全文