程序
是计算机指令的集合,它以文件的形式存储在磁盘上。
进程
是一个程序在其自身的地址空间中的一次执行活动。
线程
是进程中的一个单一的连续控制流程。一个进程可以拥有多个线程。
线程又称为轻量级进程,它和进程一样拥有独立的执行控制,由操作系统负责调度,区别在于线程没有独立的存储空间,而是和所属进程中的其它线程共享一个存储空间,这使得线程间的通信远较进程简单。
线程2种实现方法:
1.java.lang.Thread为java中的线程类,也就是说在java中实现实线程要继承Thread。
2.实现java.lang.Runnable接口
线程的状态
1.创建
2.就绪(可调用)
3.运行
4.等待/睡眠,阻塞
5.死亡
在lock()和unlock()之间就是传说中操作系统中的critical section(临界区域),一次只能有一个线程访能够访问到。
每个进程中访问临界资源的那段程序称为临界区(临界资源是一次仅允许一个进程使用的共享资源),
每次只准许一个进程进入临界区,进入后不允许其他进程进入。
进程进入临界区的调度原则是:
①如果有若干进程要求进入空闲的临界区,一次仅允许一个进程进入。
②任何时候,处于临界区内的进程不可多于一个。如已有进程进入自己的临界区,则其它所有试图进入临界区的进程必须等待。
③进入临界区的进程要在有限时间内退出,以便其它进程能及时进入自己的临界区。
④如果进程不能进入自己的临界区,则应让出CPU,避免进程出现“忙等”现象。
synchronized是在JVM层面上实现的,不但可以通过一些监控工具监控synchronized的锁定,而且在代码执行时出现异常,JVM会自动释放锁定,但是使用Lock则不行,lock是通过代码实现的,
要保证锁定一定会被释放,就必须将unLock()放到finally{}中