并行与并发
并行:两个不同的事件在同一时间运行。
并发:两个同类事件在同一时段发生。
创建线程的方式--线程的状态--线程的启动方式?
线程安全:原子性(互斥访问,同一时刻只能一个线程访问)、可见性(一个想成在主内存中修改,可以及时被其它线程看到)、有序性
多线程锁的升级
无锁-偏向锁-轻量级锁-重量级锁
死锁:四个条件
互斥条件
请求和保持条件
不可剥夺条件
环路等待条件
synchronized关键字,volatile关键字
volatile是标识当前变量在寄存器中是不确定的,需要从主内存中读取。
synchronized锁定的是当前变量,只有当前线程可以访问,其他线程不能访问。
volatile只能使用在变量级别,synchronized可以使用在变量、方法、类级别上。
synchronized与lock
synchronized无法判断是否获取锁的状态,Lock可以判断是否获取到锁
synchronized会自动释放锁(a 线程执行完同步代码会释放锁 ;b 线程执行过程中发生异常会释放锁),Lock需在finally中手工释放锁(unlock()方法释放锁),否则容易造成线程死锁;
Atomic包中的类基本的特性就是在多线程环境下,当有多个线程同时对单个(包括基本类型及引用类型)变量进行操作时,具有排他性,即当多个线程同时对该变量的值进行更新时,仅有一个线程能成功,而未成功的线程可以向自旋锁一样,继续尝试,一直等到执行成功。