day18
2020-10-27 19:21:02 6 举报
AI智能生成
线程
作者其他创作
大纲/内容
线程池
现有问题
频繁的创建及销毁线程会增加虚拟机回收频率、资源开销,造成程序性能下降。
线程池
线程容器,可设定线程分配的数量上限
将预先创建的线程对象存入池中,并重用线程池中的线程对象
避免频繁的创建和销毁
原理
将任务提交给线程池,由线程池分配线程、运行任务,并在当前任务结束后复用线程。
Executor:线程池底层接口
ExecutorService:线程池接口,可通过submit方法提交任务执行。
Executors:线程池工厂类
Callable和Future接口
Callable接口
JDK1.5加入,与Runnable接口类似, 实现之后代表一个线程任务。
Callable具有泛型返回值、可以声明异常。
Future接口
异步接收ExecutorService.submit()所返回的状态结果,当中包含了call()的返回值
Future.get()方法是一个阻塞式方法,等待计算完成,才会获取其结果。
线程安全之Lock
概述
JDK1.5加入,与synchronized比较,定义、结构更灵活。
常用子类
重入锁
ReentrantLock
读写锁
ReentrantReadWriteLock.ReadLock
ReentrantReadWriteLock.WriteLock
ReentrantLock锁
概述
相当于synchronized同步代码块
特点
* 读写:线程安全,阻塞
* 写写:线程安全,阻塞
* 读读:线程安全,阻塞
* 写写:线程安全,阻塞
* 读读:线程安全,阻塞
悲观锁
ReentrantReadWriteLock锁
获取读锁ReadLock和写锁WriteLock
特点
* 读写:线程安全,阻塞
* 写写:线程安全,阻塞
* 读读:线程安全,不阻塞(并发执行)
* 写写:线程安全,阻塞
* 读读:线程安全,不阻塞(并发执行)
重入锁
线程安全的集合之Vector
* 读写:线程安全,阻塞
* 读读:线程安全,阻塞
* 写写:线程安全,阻塞
* 读读:线程安全,阻塞
* 写写:线程安全,阻塞
效率低下
线程安全的集合之CopyOnWriteArrayList
线程安全的ArrayList
* 读读:线程安全,不阻塞
* 写写:线程安全,阻塞
* 读写:线程安全,不阻塞
* 写写:线程安全,阻塞
* 读写:线程安全,不阻塞
由算法实现的线程安全,效率高
线程安全的集合之CopyOnWriteArraySet
底层是由CopyOnWriteArrayList支撑,同时具备去重性
* 写写:线程安全,阻塞
* 读读:线程安全,不阻塞
* 读写:线程安全,不阻塞
* 当添加的元素是一个重复元素就丢弃副本不进行后续的添加行为
* 读读:线程安全,不阻塞
* 读写:线程安全,不阻塞
* 当添加的元素是一个重复元素就丢弃副本不进行后续的添加行为
oncurrentHashMap源码分析
线程安全的HashMap
Queue概述
Collection的子接口,表示队列FIFO(First In First Out)
常用子类
* ConcurrentLinkedQueue
* ArrayBlockingQueue
* LinkedBlockingQueue
* ArrayBlockingQueue
* LinkedBlockingQueue
LinkedList
可以作为链表,也可以作为队列
ConcurrentLinkedQueue概述
概述
由cas算法支持的线程安全的集合, 是所有线程安全的集合中效率最高的.
* 写写:线程安全,不阻塞
* 读写:线程安全,不阻塞
* 读读:线程安全,不阻塞
* 读写:线程安全,不阻塞
* 读读:线程安全,不阻塞
乐观锁
* 尽量避免使用锁操作,效率高
* 尽量避免使用锁操作,效率高
BlockingQueue接口
常用子类
ArrayBlockingQueue : 有界队列,可以指定容器大小题
LinkedBlockingQueue:无限队列,默认值为:Integer.MAX_VALUE
put(e):添加元素,如果没有空间可用,等待有空间可用
take():移除元素,如果没有元素可用,等待有元素可用
offer(e, time, unit): 添加元素,如果没有空间可用,等待指定时间,如果还没有就放弃
poll(time, unit) : 移除元素,如果没有元素可用,等待指定时间,如果还没有就放弃
take():移除元素,如果没有元素可用,等待有元素可用
offer(e, time, unit): 添加元素,如果没有空间可用,等待指定时间,如果还没有就放弃
poll(time, unit) : 移除元素,如果没有元素可用,等待指定时间,如果还没有就放弃
File类的概述和构造方法
File类的概述
* 绝对路径是一个固定的路径,从盘符开始
* 相对路径相对于某个位置,在IDEA下是指当前项目下
* 相对路径相对于某个位置,在IDEA下是指当前项目下
构造方法
File(String pathname):根据一个路径得到File对象(绝对路径和相对路径)
File(String parent, String child):根据一个目录和一个子文件/目录得到File对象
File(File parent, String child):根据一个父File对象和一个子文件/目录得到File对象
File类的创建功能
* public boolean createNewFile():创建文件 如果存在这样的文件,就不创建了
* public boolean mkdir():创建文件夹 如果存在这样的文件夹,就不创建了
* public boolean mkdirs():创建多级文件夹
* public boolean mkdir():创建文件夹 如果存在这样的文件夹,就不创建了
* public boolean mkdirs():创建多级文件夹
如果你创建文件或者文件夹忘了写盘符路径,那么,默认在项目路径下。
File类的常用功能
* delete:删除
* exists:判断是否存在
* isDirectory:判断是否是目录
* isFile:判断是否是文件
* getAbsolutePath:获取绝对路径
* getName:得到构造file的时候的路径。
* length:获取长度。字节数
* list:获取指定目录下的所有文件或者文件夹的名称数组
* listFile:获取指定目录下的所有文件或者文件夹的File数组
* exists:判断是否存在
* isDirectory:判断是否是目录
* isFile:判断是否是文件
* getAbsolutePath:获取绝对路径
* getName:得到构造file的时候的路径。
* length:获取长度。字节数
* list:获取指定目录下的所有文件或者文件夹的名称数组
* listFile:获取指定目录下的所有文件或者文件夹的File数组
0 条评论
下一页
为你推荐
查看更多