- 博客(12)
- 收藏
- 关注
转载 Java原子变量和CAS
原子变量什么是原子变量?为什么需要它们呢?在理解synchronized一节,我们介绍过一个Counter类,使用synchronized关键字保证原子更新操作,代码如下:public class Counter {private int count;public synchronized void incr(){ count ++;}public synchronized...
2019-06-08 16:03:50 194
转载 Java并发工具类之LongAdder
引言:java.util.concurrency.atomic.LongAdder是Java8新增的一个类,提供了原子累计值的方法。根据文档的描述其性能要优于AtomicLong,下图是一个简单的测试对比(平台:MBP):这里测试时基于JDK1.8进行的,AtomicLong 从Java8开始针对x86平台进行了优化,使用XADD替换了CAS操作,我们知道JUC下面提供的原子类都是基于Uns...
2019-06-08 11:54:19 290
转载 伪共享问题及解决方法
引言:缓存伪共享共享对象存在同一个缓存中,由于MESI协议,一个对象中一些不需要改变的属性因为其他改变的属性,导致整个对象的缓存进入到M被修改状态。MESI缓存一致性协议:https://blog.csdn.net/huangyueranbbc/article/details/84554271目前的CPU是按照64K的缓存行(Cache Line)进行读取,如果读取的数据在同一个Cach...
2019-06-08 11:02:36 472
转载 Netty ByteBuf 的零拷贝(Zero Copy)
引言:所谓的 Zero-copy, 就是在操作数据时, 不需要将数据 buffer 从一个内存区域拷贝到另一个内存区域. 因为少了一次内存的拷贝, 因此 CPU 的效率就得到的提升.转载原文:https://www.cnblogs.com/xys1228/p/6088805.html...
2019-06-08 08:38:12 208
转载 原理剖析-Netty之无锁队列
一、大致介绍1、了解过netty原理的童鞋,其实应该知道工作线程组的每个子线程都维护了一个任务队列;2、细心的童鞋会发现netty的队列是重写了队列的实现方法,覆盖了父类中的LinkedBlockingQueue队列,但是如今却换成了JCTools的一些并发队列,因为JCTools是一款对jdk并发数据结构进行增强的并发工具;3、那么问题就来了,现在的netty要用新的队列呢?难道是新的队列...
2019-06-08 07:58:03 1047
转载 SpringAOP概念、配置与使用
引言:转载文章主要说明了下SpringAOP的概念,包含了Spring官方给的概念,配置其中包括了xml以及annotation方式。原文:https://blog.csdn.net/u010890358/article/details/80640433...
2019-06-08 02:55:18 92
转载 HashMap、Hashtable与ConcurrentHashMap
先说这三个Map的区别:HashTable底层数组+链表实现,无论key还是value都不能为null,线程安全,实现线程安全的方式是在修改数据时锁住整个HashTable,效率低,ConcurrentHashMap做了相关优化初始size为11,扩容:newsize = olesize2+1计算index的方法:index = (hash & 0x7FFFFFFF) % tab....
2019-06-08 02:32:58 88
转载 executors与threadPoolExecutor区别
介绍:线程池是一种多线程处理形式,处理过程中将任务添加到队列,然后在创建线程后自动启动这些任务。线程池线程都是后台线程。为什么要使用线程池?这里借用《Java并发编程的艺术》提到的来说一下使用线程池的好处:降低资源消耗。 通过重复利用已创建的线程降低线程创建和销毁造成的消耗。提高响应速度。 当任务到达时,任务可以不需要的等到线程创建就能立即执行。提高线程的可管理性。 线程是稀缺资源,如...
2019-06-08 02:03:22 7143
转载 Java8的HashMap详解(含与之前版本hashmap的区别)
JDK1.8对HashMap底层的实现进行了优化,例如引入红黑树的数据结构和扩容的优化等。本文结合JDK1.7和JDK1.8的区别,深入探讨HashMap的结构实现和功能原理,文章末尾附有HashMap的put方法和resize方法的源码解析。简介Java为数据结构中的映射定义了一个接口java.util.Map,此接口主要有四个常用的实现类,分别是HashMap、Hashtable、Link...
2019-06-08 01:43:35 6309
转载 Java并发编程总结
安全性和活跃度通常相互牵制。我们使用锁来保证线程安全,但是滥用锁可能引起锁顺序死锁。类似地,我们使用线程池和信号量来约束资源的使用,但是缺不能知晓哪些管辖范围内的活动可能形成的资源死锁。Java应用程序不能从死锁中恢复,所以确保你的设计能够避免死锁出现的先决条件是非常有价值。一.死锁经典的“哲学家进餐”问题很好的阐释了死锁。5个哲学家一起出门去吃中餐,他们围坐在一个圆桌边。他们只有五只筷子(...
2019-06-08 01:00:59 83
转载 finalize的生命周期
本文的目的并不是鼓励使用finalize方法,而是大致理清其作用、问题以及GC执行finalize的过程。1finalize的作用finalize()是Object的protected方法,子类可以覆盖该方法以实现资源清理工作,GC在回收对象之前调用该方法。finalize()与C++ 中的析构函数不是对应的。C++中的析构函数调用的时机是确定的(对象离开作用域或delete掉),但Jav...
2019-06-07 23:09:29 116
转载 Exception和Error的区别
Exception和Error有什么区别(转载)之前写了一个基础知识的文章,里边已经介绍了Exception和Error的区别,也介绍了异常的使用规则,但是没有具体说一下在日常使用中的一个规范,有时,面试时会问到的一些点。 本篇文章稍微梳理一下。在日常代码编写过程中,肯定不会出现没有错误的程序,无错误的程序有可能会出现在“码农”的幻想中。我们在日常的开发中,异常的处理肯定是大家经常碰到的,...
2019-06-07 22:41:02 274
空空如也
空空如也
TA创建的收藏夹 TA关注的收藏夹
TA关注的人