JAVA多线程和并发
文章平均质量分 94
JF Coder
https://gitee.com/jf_g_admin
展开
-
ReentranLock锁解析
用于实现依赖先进先出 (FIFO) 等待队列的阻塞锁和相关同步器(信号量、事件等) 此类支持默认独占模式和共享模式中的一种或两种。 当以独占模式获取时,其他线程尝试获取不会成功。 多个线程获取的共享模式可能(但不一定)成功。 这个类不“理解”这些差异,除了机械意义上的区别,当共享模式获取成功时,下一个等待线程(如果存在)也必须确定它是否也可以获取。 在不同模式下等待的线程共享同一个 FIFO 队列原创 2021-08-14 23:35:37 · 6822 阅读 · 4 评论 -
从源码分析面试中经常出现的集合类问题
Collection接口,ArrayList(动态数组)扩容和add,set等方法, LinkedList(双向链表),Vector和ArrayList扩容数组的区别,HashMap(链表加数组)原创 2021-03-21 17:14:37 · 10311 阅读 · 15 评论 -
CAS的特性,乐观锁
CAS(Compare And Swap)指比较并转换,CAS算法包含三个参数 CAS(V,EN),V表示要更新的变量,E表示预期的值,N表示新值,有仅在V值等于E值时,才会将V值设置成N值,如果V跟E值不同,则说明有其他线程做了更新,当前线程什么都不做,最后返回CAS当前V的真实值;CAS操作采用了乐观锁的思想乐观嘛,总是以为自己可以成功完成操作。在多个线程同时使用时使用CAS操作一个变量时,只有一个线程会胜出并成功更新,其余均失败,失败的线程不会被挂起,并且允许再次尝试;CAS即使没有锁,也可以发原创 2020-12-08 12:33:43 · 16051 阅读 · 6 评论 -
多线程你还在用stop()和suspend()吗
stop() 和suspend() 方法为何不推荐使用反对使用stop(),是因为它不安全。它会解除由线程获取的所有锁定,而且如果对象处于一种不连贯状态,那么其他线程能在那种状态下检查和修改它们。结果很难检查出真正的问题所在。suspend() 方法容易发生死锁。调用suspend() 的时候,目标线程会停下来,但却仍然持有在这之前获得的锁定。此时,其他任何线程都不能访问锁定的资源,除非被"挂起" 的线程恢复运行。对任何线程来说,如果它们想恢复目标线程,同时又试图使用任何一个锁定的资源,就会造成死锁。原创 2020-12-04 10:38:18 · 3382 阅读 · 3 评论 -
关于JAVA多线程的那些东西
多线程有什么用?多核CPU现在的CPU动不动都是四核,八核甚至更多核,如果是单线程的程序,那么在双核CPU上就浪费了50%,在4核CPU上就浪费了75%。单核CPU上所谓的"多线程"那是假的多线程,同一时间处理器只会处理一段逻辑,只不过线程之间切换得比较快,看着像多个线程"同时"运行罢了。多核CPU上的多线程才是真正的多线程,它能让你的多段逻辑同时工作,多线程,可以真正发挥出多核CPU的优势来,达到充分利用CPU的目的。防止阻塞从程序运行效率的角度来看,单核CPU不但不会发挥出多线程的优势,反而原创 2020-12-04 10:17:30 · 12270 阅读 · 3 评论