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资源;
- 操作系统任务调度会忽略挂起的任务。
进程调度算法:FIFO,时间片轮转,短作业优先,优先级调度,多级队列调度算法,多级队列反馈调度算法
虚拟内存:
非递归中序遍历
RC和RR怎么实现
I/O类型:
BIO
NIO
AIO