第一章 多线程与并发基础知识
并发背后的问题:
1.3程序、进程与线程
程序是静态的概念,windows下通常指exe文件。
进程是动态的概念,是程序的运行状态,进程说明程序在内存中的边界。
线程是进程内的一个基本任务,每个线程都有自己的功能,是cpu分配与调度的基本单位。
线程的三大特性:原子性、可见性、有序性
java内存模型:JAVA Memory Model
第二章java多线程
2.1创建多线程-继承Thread类
创建线程的三种方式:
继承Thread类 实现Runnable接口 使用Callable和Future创建线程
2.2创建多线程-实现Runnable接口
2.3创建多线程-实现Callable接口
2.4Synchronized线程同步机制
2.5线程的五种状态
新建 就绪 运行中 阻塞 死亡
2.6死锁的产生
多线程对公共资源进行操作时,彼此不释放自己的资源,而去试图操作其他线程的资源,而形成交叉引用,就会产生死锁。
尽量减少公共资源的引用,用完立马释放;
2.7重新认识线程安全ThreadSafe
第三章JDK并发工具包JUC
3.1java并发工具包与连接池
executors
1.CachedThreadPool可缓存线程池
无限大,如果线程池中没有可用的线程则创建,有空闲的线程则利用起来
2.FixedThreadPool定长线程池
固定线程总数,空间线程用于执行任务,如果线程都在使用后续进入等待状态,在线程池中的线程释放后,再执行后续的任务。
如果任务处于等待的状态,备选的等待算法为LIFO后进先出
3.SingleThreadExcecutor单线程池
4.ScheduledTreadPool调度线程池
线程池优点:
重用存在的线程,减少对象消亡的开销
线程总是可控,提高资源的利用率
避免过多资源竞争,避免阻塞
提供额外功能,定时执行、定期执行、监控等
3.2JUC之CountDownLatch倒计时锁
适合总分任务。
3.3JUC与Semaphore信号量
Semaphore.acquire() semaphore.release()
3.4JUC之CyclicBarrier循环屏障
3.5JUC之ReetrantLook重入锁
任意线程在获取到锁之后,再次获取该锁而不会被该锁阻塞。
3.6JUC之Condition线程等待与唤醒
核心方法:
await()阻塞当前线程,直到signal唤醒
signal()唤醒被await的线程,从中断处继续执行
signalAll()唤醒所有被await()阻塞的线程
3.7JUC之Callable_Future
Callable有返回值并且可以抛出异常
Future是一个接口,它用于表示异步计算的结果。提供了检查计算是否完成的方法,以等待计算的完成,并获取计算的结果。
3.8JUC之同步容器
3.9JUC之Atomic与CAS算法
原子性:是指一个操作或者多个操作要么全部执行,且执行过程中不会被任何因素打断,要么都不执行。
3.10课程总结