自定义博客皮肤VIP专享

*博客头图:

格式为PNG、JPG,宽度*高度大于1920*100像素,不超过2MB,主视觉建议放在右侧,请参照线上博客头图

请上传大于1920*100像素的图片!

博客底图:

图片格式为PNG、JPG,不超过1MB,可上下左右平铺至整个背景

栏目图:

图片格式为PNG、JPG,图片宽度*高度为300*38像素,不超过0.5MB

主标题颜色:

RGB颜色,例如:#AFAFAF

Hover:

RGB颜色,例如:#AFAFAF

副标题颜色:

RGB颜色,例如:#AFAFAF

自定义博客皮肤

-+
  • 博客(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 169

转载 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 263

转载 伪共享问题及解决方法

引言:缓存伪共享共享对象存在同一个缓存中,由于MESI协议,一个对象中一些不需要改变的属性因为其他改变的属性,导致整个对象的缓存进入到M被修改状态。MESI缓存一致性协议:https://blog.csdn.net/huangyueranbbc/article/details/84554271目前的CPU是按照64K的缓存行(Cache Line)进行读取,如果读取的数据在同一个Cach...

2019-06-08 11:02:36 457

转载 Netty ByteBuf 的零拷贝(Zero Copy)

引言:所谓的 Zero-copy, 就是在操作数据时, 不需要将数据 buffer 从一个内存区域拷贝到另一个内存区域. 因为少了一次内存的拷贝, 因此 CPU 的效率就得到的提升.转载原文:https://www.cnblogs.com/xys1228/p/6088805.html...

2019-06-08 08:38:12 175

转载 原理剖析-Netty之无锁队列

一、大致介绍1、了解过netty原理的童鞋,其实应该知道工作线程组的每个子线程都维护了一个任务队列;2、细心的童鞋会发现netty的队列是重写了队列的实现方法,覆盖了父类中的LinkedBlockingQueue队列,但是如今却换成了JCTools的一些并发队列,因为JCTools是一款对jdk并发数据结构进行增强的并发工具;3、那么问题就来了,现在的netty要用新的队列呢?难道是新的队列...

2019-06-08 07:58:03 1010

转载 SpringAOP概念、配置与使用

引言:转载文章主要说明了下SpringAOP的概念,包含了Spring官方给的概念,配置其中包括了xml以及annotation方式。原文:https://blog.csdn.net/u010890358/article/details/80640433...

2019-06-08 02:55:18 81

转载 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 80

转载 executors与threadPoolExecutor区别

介绍:线程池是一种多线程处理形式,处理过程中将任务添加到队列,然后在创建线程后自动启动这些任务。线程池线程都是后台线程。为什么要使用线程池?这里借用《Java并发编程的艺术》提到的来说一下使用线程池的好处:降低资源消耗。 通过重复利用已创建的线程降低线程创建和销毁造成的消耗。提高响应速度。 当任务到达时,任务可以不需要的等到线程创建就能立即执行。提高线程的可管理性。 线程是稀缺资源,如...

2019-06-08 02:03:22 6923

转载 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 6232

转载 Java并发编程总结

安全性和活跃度通常相互牵制。我们使用锁来保证线程安全,但是滥用锁可能引起锁顺序死锁。类似地,我们使用线程池和信号量来约束资源的使用,但是缺不能知晓哪些管辖范围内的活动可能形成的资源死锁。Java应用程序不能从死锁中恢复,所以确保你的设计能够避免死锁出现的先决条件是非常有价值。一.死锁经典的“哲学家进餐”问题很好的阐释了死锁。5个哲学家一起出门去吃中餐,他们围坐在一个圆桌边。他们只有五只筷子(...

2019-06-08 01:00:59 73

转载 finalize的生命周期

本文的目的并不是鼓励使用finalize方法,而是大致理清其作用、问题以及GC执行finalize的过程。1finalize的作用finalize()是Object的protected方法,子类可以覆盖该方法以实现资源清理工作,GC在回收对象之前调用该方法。finalize()与C++ 中的析构函数不是对应的。C++中的析构函数调用的时机是确定的(对象离开作用域或delete掉),但Jav...

2019-06-07 23:09:29 107

转载 Exception和Error的区别

Exception和Error有什么区别(转载)之前写了一个基础知识的文章,里边已经介绍了Exception和Error的区别,也介绍了异常的使用规则,但是没有具体说一下在日常使用中的一个规范,有时,面试时会问到的一些点。 本篇文章稍微梳理一下。在日常代码编写过程中,肯定不会出现没有错误的程序,无错误的程序有可能会出现在“码农”的幻想中。我们在日常的开发中,异常的处理肯定是大家经常碰到的,...

2019-06-07 22:41:02 241

空空如也

空空如也

TA创建的收藏夹 TA关注的收藏夹

TA关注的人

提示
确定要删除当前文章?
取消 删除