增加红黑树这个存储结构 在Java8中,为什么要增加红黑树这种数据结构来进行存储,而不是全部使用链表来进行存储呢? 1.因为攻击者可以构造大量具有相同hashCode的内容,使其全部放在同一个列表中,这样,在查找的时候,所花费的时间会很长。这个时候,如果采用红黑树这个结构来进行存储,那么其查找的效率 ...
分类:
编程语言 时间:
2019-04-19 00:40:51
阅读次数:
181
异步的使用场景: 1、不涉及共享资源,或对共享资源只读,即非互斥操作 2、没有时序上的严格关系 3、不需要原子操作,或可以通过其他方式控制原子性 4、常用于IO操作等耗时操作,因为比较影响客户体验和使用性能 5、不影响主线程逻辑 同步的使用场景:不使用异步的时候 同步的好处: 1、同步流程对结果处理 ...
分类:
其他好文 时间:
2019-04-16 16:04:05
阅读次数:
571
相比Redis事务来说,Lua脚本有以下优点减少网络开销: 不使用 Lua 的代码需要向 Redis 发送多次请求, 而脚本只需一次即可, 减少网络传输;原子操作: Redis 将整个脚本作为一个原子执行, 无需担心并发, 也就无需事务;复用: 脚本会永久保存 Redis 中, 其他客户端可继续使用 ...
分类:
其他好文 时间:
2019-04-16 16:01:09
阅读次数:
183
恢复内容开始 synchronized 互斥锁 synchronized(this) 当前类的所有synchronized(this) 都被锁了,还有synchronized static也一样 synchronized代码块实际上多了monitorenter和monitorexit两条指令。mon ...
分类:
编程语言 时间:
2019-04-12 13:15:41
阅读次数:
189
在高并发的情况下,对数据row1 column=cf1:qual1, timestamp=1, value=val1的插入或者更新可能会导致非预期的情况, 例如:原本客户端A需要在value=val1的条件下将value更新成val_A,高并发下客户端B可能抢先将数据value=val1更新成val ...
分类:
其他好文 时间:
2019-04-05 22:39:26
阅读次数:
186
最近在看 java.util.concurrent.atomic 包下的AtomicInteger源码发现它是利用CAS来实现原子操作、Volatile保证元素的可见性来实现无锁下的线程安全。 决定深入了解一下CASMySql中的MVCC(多并发版本控制)中的乐观锁也是通过CAS机制和版本号实现无锁 ...
分类:
其他好文 时间:
2019-04-04 12:53:55
阅读次数:
177
某天,我同学发给我这样一道题。看着还是挺简单的,我当时 就想到了线程等待。 使用AutoResetEvent类来两个线程互相等待,互相通知 事实证明,这个方法是可行的。原理就是线程2等待线程1事件的发生,线程1等待线程2事件的发生。因为线程1是先跑起来的,就保证了这样一种操作的可行性。 最后运行结果 ...
volatile本身并不保证原子性和线程安全,它只保证线程可见性。比如有两个应用场景,1在单例模式的双重检测中用 2在多个线程读里,用于判断标志位 {因为redis是单线程,所以它的原子操作incre加一操作,才能保证线程安全。而java并发包中的atomic是线程安全的} 下图例子即表明,多线程时 ...
分类:
其他好文 时间:
2019-03-27 21:28:16
阅读次数:
187
程序员需要留意保护共享资源,防止共享资源禀赋访问,如果多个执行线程同时访问和操作数据,有可能发生各现场之间相互覆盖共享数据的情况,造成被访问数据处于不一致的状态。 Linux内核是抢占式内核,意味着调度程序可以在任何时刻抢占正在运行的内核代码,重新调度其他的进程执行。 9.1 临界区竞争条件 所谓临 ...
分类:
其他好文 时间:
2019-03-19 01:40:15
阅读次数:
212
jdk1.8中新原子操作封装类LongAdder和jdk1.5的AtomicLong和synchronized的性能对比,直接上代码: 看看输出结果: jdk版本,作者及类名: 让我们来膜拜一下大神!2秒破亿次累加。翻倍的性能提升。 ...
分类:
其他好文 时间:
2019-03-17 01:05:49
阅读次数:
189