java util concurrent

第一章 多线程与并发基础知识

并发背后的问题:

1.3程序、进程与线程

程序是静态的概念,windows下通常指exe文件。

进程是动态的概念,是程序的运行状态,进程说明程序在内存中的边界。

线程是进程内的一个基本任务,每个线程都有自己的功能,是cpu分配与调度的基本单位。

线程的三大特性:原子性、可见性、有序性

java内存模型:JAVA Memory Model

 

第二章java多线程

2.1创建多线程-继承Thread

创建线程的三种方式:

继承Thread 实现Runnable接口 使用CallableFuture创建线程

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.2JUCCountDownLatch倒计时锁

适合总分任务。

3.3JUCSemaphore信号量

Semaphore.acquire() semaphore.release() 

 

3.4JUCCyclicBarrier循环屏障

3.5JUCReetrantLook重入锁

任意线程在获取到锁之后,再次获取该锁而不会被该锁阻塞。

3.6JUCCondition线程等待与唤醒

核心方法:

await()阻塞当前线程,直到signal唤醒

signal()唤醒被await的线程,从中断处继续执行

signalAll()唤醒所有被await()阻塞的线程

3.7JUCCallable_Future

Callable有返回值并且可以抛出异常

Future是一个接口,它用于表示异步计算的结果。提供了检查计算是否完成的方法,以等待计算的完成,并获取计算的结果。

3.8JUC之同步容器

3.9JUCAtomicCAS算法

原子性:是指一个操作或者多个操作要么全部执行,且执行过程中不会被任何因素打断,要么都不执行。

3.10课程总结

猜你喜欢

转载自www.cnblogs.com/zszitman/p/11111703.html