进程的管理和调度:
1.进程创建后进入就绪态(不是直接进入运行态),和其他进程一起竞争CPU
2.只有在就绪态队列中的进程才有资格竞争CPU
3.所有阻塞队列中的进程没有资格竞争CPU
4.阻塞态的进程只能由运行态的进程唤醒
5.阻塞态进程被唤醒后不是立刻进入运行态
6.进程被进程自己阻塞
线程创建:
继承:
public class Thread() extends Thread {
public Thread(){
this.start;
}
}
接口:
public class Thread() implements Runnable {
public Thread(){
new Thread(this).start();
}
}
上述两种因为JAVA只能单类继承,故用接口实现 程序可拓展性更强。
锁:
private static final Object lock = new Object();
synchronized(lock) {
}
lock的类型必须是Object,由于所有类的基类都是Object 对象都可以当做锁来用
(int等部分类可能内部原理,无法做锁)
锁的基础及原理:
1.锁必须是所有相关进程所共享的,大家都知道这个锁的存在
原理:
当一段程序被锁包围,当一个进程执行到锁时,先判断该锁是否为锁上状态
若锁上:则该进程被阻塞并进入该锁下的阻塞队列
若未锁:先上锁,进程再进入
当锁内的进程执行完程序后,解开锁并且将锁下阻塞队列所有程序唤醒
volatile关键字:
该关键字是不对其进行寄存器优化。
但在线程中,若线程中公用的数据被寄存器优化,则多个线程无法共同操作一个空间的内容。(每个进程操控自己所指的寄存器内的值,而不是公用的空间)