java集合衍生的知识点
2022-06-19 21:06:29 9 举报
java集合体系,根据hashmap是单线程,对线程知识点进行部分补充,有单线程就有多线程,也就延伸到多线程,线程池,锁,同时hashmap扩容在JDK1.7和1.8是不一样的,对jdk1.8进行理解
作者其他创作
大纲/内容
ArrayList
Runnable
新建状态就绪转态运行状态阻塞状态:等待阻塞,同步阻塞,其他阻塞sleep,join死亡状态
底层源码和扩容机制jdk1.7 数组+链表jdk1.8数组+链表+红黑树扩容:(jdk1.8)初始化准备存入数据时,默认数组长度为16,负载因子0.75,装载因子12首先根据key算出Hsah值,根据hash值*数组长度算出地址值,把数据存入map中,再次存入数据时,先根据key算出hash值,如果hash值一样的话,判断地址值是否一致,如果一致,判断内容是否相同,相同的话直接覆盖,不相同的话,往后边链表添加数据。hash值不一样,看链表中是否有值,有值的话,判断是否重复,重复的话继续往后判断直达不重复添加到链表的最后,如果两个key的hash和地址值一样的话,key值重复如果key的hash值一样,地址值不一样,但是内容相等的话,key重复
线程的创建1.通过继承Thread类,重写Thread类的run()方法2.通过实现Runnable接口创建线程类
TreeSet
等待Blocked
collection
synchronized
LinkedHashMap
start()
notify()/notifyAllinterrupt()阻塞
list
map
集合
多线程什么是线程池,线程池有哪些线程池是将多个线程对象放到一个容器中,在使用的时候就不需要new直接从线程池中拿就可以看,节省了开辟线程的时间,提升代码的执行效率线程:自定义线程池,单线程池,置顶工作数量线程池,可缓存线程池线程池对象有哪些参数:1.核心线程数,2.最大线程数,3.存活时间,4.存活时间单位,5.任务队列,6.线程工厂,7.异常方法拒绝策略:1.直接抛出异常,2.用调用者所在的线程老执行3.丢去阻塞队列中靠前的任务,斌执行当前任务,4.直接丢弃常见线程安全的并发容器CopyOnWriteList、CopyOnWriteArraySet采用写时复制实现线程安全ConcurrentHashMap采用分段锁的方式实现线程安全
正常结束异常退出
有序可重复
hashmap
HsahMap是单线程的,线程生命周期
HashSet
set
wait()
Synchronized底层实现是什么,lock基层是什么,有什么区别区别:Synchronized和lock都是在java中用来解决线程安全问题的一个工具2.特性:Synchronized是java中的同步关键字而lock是juc包里面提供的一个接口,其中有一个是Reentrantlock一个重用锁的实现,而Synchronized可以通过两种方式去控制锁的力度,一种是吧Synchronized修饰在方法层,另一种是把Synchronized修饰在代码块上,通过Synchronized加锁对象的生命周期来控制锁的作用范围比如锁对象是静态对象或者类对象这个锁就是全局锁,如果锁对象是普通实例对象,那么这个锁的控制范围取决于这个生命周期lock锁是通过lock()方法和unlock()方法来控制,包裹再这两个方法中间法的是可以保证线程安全的,所得作用域是取决于lock实例的生命周期lock锁比Synchronized的灵活性更高,lock可以自主的决定什么时候加锁什么时候释放锁,lock还提供了trylock()这个方法,这个方法通过返回true/false来告诉当前线程是否已经有其他线程正在用锁,而Synchronized由于是关键字,所以无法实现非阻塞竞争锁的方法,Synchronized锁的释放是被动的,就是当Synchronized同步的代码块执行结束或者代码出现异常才会被释放3.lock锁提供了公平锁和非公平锁的机制,公平锁是指线程竞争锁资源的时候如果已经有其他线程正在排队,或者等待锁释放,那么单签竞争锁的线程是无法去插队的而非公平锁就是不管是否有线程在排队等待锁,他都会去尝试竞争一次锁,而Synchronized只提供了非公平锁的实现4.性能:Synchronized和lock在性能方面想差不大,在实现上会有一定的区别,Synchronized引入了偏向锁,轻量级锁和重量级锁,及锁升级的机制来实现锁的优化,而lock中使用的是自旋锁的方式,去实现性能优化,(CAS+自旋,加锁的时候CAS中的sates+1,释放锁之后这个值就-1)
HashMap和HashTable的区别HashMap丨HashTable安全性: 不安全 丨 安全有Synchronize contains方法: 2个(containsKey,containsValue) 丨 3个(多一个contains)key和value是否允许有null值:key只能有一个为null,value可以有多个null值 丨不可以有null值 初始化和扩容机制: 默认16扩容是原来的二倍 默认是原来的2倍+1
无序
sleep(结束)join(结束)IO完成)
无序不可重复
Dead
sleep()join()
Running
new
treemap
有序
LinkedList
死锁产生死锁的原因:1.系统资源不足2.进程/线程运行推进的顺序不合适3.资源分配不当死锁产生的必要条件:1.互斥条件,一个资源只能被一个进程使用2.请求与保持条件,一个进程因为请求资源阻塞时,对已获得的资源保持不放3.不剥夺条件进程在获得资源之后在没有使用完成之前不可以强行剥夺4.循环等待条件,死循环死锁的解除与预防让四个必要条件不同时产生,对资源的分配药给予合理的规划
LinkedHashSet
锁定Blocked
Blocked
收藏
收藏
0 条评论
下一页
为你推荐
查看更多