20220801笔记

2022-08-11  本文已影响0人  码农孤磊

今天学了下面这几样

collection接口Map接口集合实现线程安全线程的原子性、可见性、有序性新建线程的方式线程池的种类以及特点线程池的拒绝策略

collection接口

collection接口的主要有两个子接口,分别为List和Set。

Map接口

Map为键值对对象集合,其中每一个对象都有两个属性,分别为key和value,可能会有多个相同的value,但是相同的key只能同时存在一个。其主要实现类主要有HashMap、LinedHashMap、HashTable和TreeMap。

HashMap

LinedHashMap

在HashMap的基础上添加了一条双向链表维护顺序,保证了在迭代的时候元素的有序性。

HashTable

与HashMap区别不大,不过保证了线程安全,效率稍低。同时key与value不允许为空。底层数组长度可以为任意数值,默认为11。(不推荐使用)

TreeMap

TreeMap由红黑树实现,同时实现了SortedMap接口,保证了元素的有序性。key和value允许为空,

集合实现线程安全

  1. 使用synchronize或Lock加锁以此保证线程安全。(速度慢)

  2. 使用ConcurrentHashMap实现线程安全,速度也快。底层主要通过CAS和volatile还有synchronize实现,初始化状态由volatile+CAS解决。

线程的原子性、可见性、有序性

新建线程的方式

  1. 通过继承Thread类创建.

  2. 实现Runnable接口创建线程。

  3. 通过线程池创建线程。

  4. 通过Callable和Future可以创建有返回值的线程。

线程池的种类以及特点

  1. Single Thread Executor线程池:线程池中只有一个线程,当一个线程结束会新创建一个线程继续执行。适用于多任务线性执行的情况。

  2. Cached Thread Pool线程池:可缓存的线程池,当线程池的任务小于规模时,会自动回收对于线程,当线程池的任务多于规模的时候,会自动创建新的线程。极端情况下会 创建过多的线程,耗尽 CPU 和内存资源 ,适用于大批量,处理速度快的任务。

  3. Fixed Thread Pool线程池:固定线程数的线程池,空闲时线程会一直等待。适用于需要长期执行的任务。

  4. Schedule Thread Pool线程池:固定长度的线程池,以延迟或定时的方式执行任务。适用于周期性执行的任务。

线程池的拒绝策略

  1. CallerRunPolicy:当有新的任务提交以后,如果线程池没有能力只执行,那就让提交任务的线程去执行。

  2. AbortPolicy:直接抛出RejectedExecutionException异常,可以让开发直接获取到拒绝状态,能够根据业务去重试或者丢弃任务。

  3. DiscardPolicy:直接丢弃任务,此方式有一定风险,因为无法感知到任务到底是被执行还是丢弃。

  4. DiscardOldestPolity:丢弃当前队列中最老的任务,与上一种不同之处在于丢弃的是存活时间最长的任务,同样,他也有丢失数据的风险。

本文使用 文章同步助手 同步

上一篇 下一篇

猜你喜欢

热点阅读