首页
首页
AI Coding
NEW
沸点
课程
直播
活动
AI刷题
APP
插件
搜索历史
清空
创作者中心
写文章
发沸点
写笔记
写代码
草稿箱
创作灵感
查看更多
会员
登录
注册
時光以北
掘友等级
Java小疯子
|
世界和平有限公司
Java小疯子
获得徽章 0
动态
文章
专栏
沸点
收藏集
关注
作品
赞
21
文章 21
沸点 0
赞
21
返回
|
搜索文章
最新
热门
数据结构之数组
线性表. 顾名思义,线性表就是数据排成像一条线一样的结构。每个线性表上的数据最多只有前和后两个方向。 除了数组,链表,队列,栈等也是线性结构. 与它相对立的概念是非线性表,比如二叉树、堆、图等。之所以叫非线性,是因为,在非线性表中,数据之间并不是简单的前后关系。 如果数组存储的…
一次接口性能优化实战
通过 jstack 查看线程的运行状态发现很多线程都WAITING在打印日志这里了. 通过代码分析, 我们的日志打印的太多了, 我们的日志打印模式是ASYNC异步的.
J.U.C 之 ConcurrentSkipListMap
到目前为止,我们在Java世界里看到了两种实现key-value的数据结构:Hash、TreeMap,这两种数据结构各自都有着优缺点。 Hash表:插入、查找最快,为O(1);如使用链表实现则可实现无锁;数据有序化需要显式的排序操作。 红黑树:插入、查找为O(logn),但常数…
J.U.C 之 ConcurrentLinkedQueue
要实现一个线程安全的队列有两种方式:阻塞和非阻塞。阻塞队列无非就是锁的应用,而非阻塞则是CAS算法的应用。下面我们就开始一个非阻塞算法的研究:CoucurrentLinkedQueue。 ConcurrentLinkedQueue是一个基于链接节点的无边界的线程安全队列,它采用…
J.U.C 之 ConcurrentHashMap 红黑树转换
ConcurrentHashMap的实现过程,其中有提到在put操作时,如果发现链表结构中的元素超过了TREEIFY_THRESHOLD(默认为8),则会把链表转换为红黑树,已便于提高查询效率。代码如下: 先看红黑树的基本概念:红黑树是一棵特殊的平衡二叉树,主要用它存储有序的数…
J.U.C 之ConcurrentHashMap(JDK1.8)
在1.8版本以前,ConcurrentHashMap采用分段锁的概念,使锁更加细化,但是1.8已经改变了这种思路,而是利用CAS+Synchronized来保证并发更新的安全,当然底层采用数组+链表+红黑树的存储结构。 上面是ConcurrentHashMap定义的常量。下面介…
J.U.C 之ConcurrentHashMap(JDK1.7)
Hashmap多线程会导致HashMap的Entry链表形成环形数据结构,一旦形成环形数据结构,Entry的next节点永远不为空,就会产生死循环获取Entry。 HashTable使用synchronized来保证线程安全,但在线程竞争激烈的情况下HashTable的效率非常…
HashMap在多线程下不安全问题(JDK1.7)
多线程put操作后,get操作导致死循环。 多线程put操作,导致元素丢失。 由上可知,Thread-7由于HashMap的扩容导致了死循环。 假设我们的hash算法是简单的key mod一下表的大小(即数组的长度)。 最上面是old hash表,其中HASH表的size=2,…
J.U.C 之Exchanger
Exchange是最简单的也是最复杂的,简单在于API非常简单,就一个构造方法和两个exchange()方法,最复杂在于它的实现是最复杂的。 在API是这么介绍的:可以在对中对元素进行配对和交换的线程的同步点。每个线程将条目上的某个方法呈现给 exchange 方法,与伙伴线程…
J.U.C 之Semaphore
信号量 Semaphore 是一个控制访问多个共享资源的计数器,和 CountDownLatch 一样,其本质上是一个“共享锁”。 一个计数信号量。从概念上讲,信号量维护了一个许可集。 但是,不使用实际的许可对象,Semaphore 只对可用许可的号码进行计数,并采取相应的行动…
下一页
个人成就
文章被点赞
190
文章被阅读
96,500
掘力值
2,200
关注了
6
关注者
92
收藏集
1
关注标签
14
加入于
2018-08-01