Java并发编程
Java并发编程包括以下内容:
- 线程状态
- 悲观锁和乐观锁
- 并发编程三要素
- 线程之间协作
- volatile关键字
- synchronized关键字
- CAS
- AQS
- Future
- 线程池
线程状态
线程状态有以下5类:
- 新建状态:新创建了一个线程对象
- 就绪状态:线程对象创建后,其他线程调用了该对象的start()方法,该状态的线程位于可执行线程池中,变得可执行,等待获取cpu的使用权
- 执行状态:就绪状态的线程获取了CPU,执行程序代码
- 堵塞状态;堵塞状态是线程由于某种原因放弃CPU使用权。临时停止执行。直到线程进行就绪状态,才有机会转到执行状态
- 死亡状态:线程运行完了或者因异常退出了run()方法,该线程结束生命周期
并发编程三大要素
- 原子性:
原子,即一个不可再被分割的颗粒。在Java中原子性指的是一个或多个操作要么执行成功要么全部执行失败 - 有序性:
程序执行的顺序按照代码的先后顺序执行 - 可见性 :
当多个线程访问同一个变量时,如果其中一个线程对其作了修改,其他线程会获取到最新的值
悲观锁和乐观锁
- 悲观锁:每次操作都会加锁,会造成线程阻塞。
- 乐观锁:每次操作不加锁而是假设没有冲突而去完成某项操作,如果因为冲突失败就重试,直到成功为止,不会造成线程阻塞。
线程之间协作
- wait():wait()的作用是让当前线程进入等待状态,同时,wait()也会让当前线程释放它所持有的锁。“直到其他线程调用此对象的 notify() 方法或 notifyAll() 方法”,当前线程被唤醒(进入“就绪状态”)
class ThreadA extends Thread{
public ThreadA(String name) {
super(name);
}
public void run() {
synchronized