Java中多线程状态和进程状态

状态转换图.png

Java源码中给出了5中状态:

  • New:新new出的一个线程对象,还没有调用run方法;
  • Runnable: 可运行状态,线程可能在运行,也可能在等待CPU资源;
  • Blocked: 等待一个可重入锁,或者等待一个锁;
  • Waiting: wait(), join()方法调用后进入的一个状态,需要通过notifyAll或者notify进行一个唤醒;
  • TIMED_WAITING: sleep方法,wait(time)方法,或者join(time)方法调用后会进入的一个状态,需要通过notifyAll或者notify进行一个唤醒或者睡眠时间到会自动进入Runnable。

Blocked和waiting状态的区别:
一个处理waiting状态的线程被唤醒后进入Blocked状态,竞争synchronized锁。

进程的三种状态:
就绪态:除CPU资源以外的其他资源已经准备好;
运行态:正在CPU运行;
阻塞态:等待一些其他时间的完成,比如I/O;

挂起(suspend)和阻塞的区别:

  • 挂起是主动行为(需要调用Resume方法主动激活),阻塞是被动行为(等待某件事件完成自动恢复为就绪状态);
  • 挂起不会释放CPU资源,阻塞会释放CPU资源;
  • 操作系统任务调度会忽略挂起的任务。
进程状态转换.png

进程调度算法:FIFO,时间片轮转,短作业优先,优先级调度,多级队列调度算法,多级队列反馈调度算法

虚拟内存:
非递归中序遍历
RC和RR怎么实现
I/O类型:
BIO
NIO
AIO

©著作权归作者所有,转载或内容合作请联系作者
平台声明:文章内容(如有图片或视频亦包括在内)由作者上传并发布,文章内容仅代表作者本人观点,简书系信息发布平台,仅提供信息存储服务。