伪共享

伪共享 从字面意思,我一开始理解的有点迷糊,一开始以为在内存中的变量是不可靠的呢,但是不是!它带来的影响是,会造成多线程操作同一个缓存行的变量性能下降,因为同一个缓存行的修改,只能能同时被一个线程修改,这样就失去了多线程的意义 ...

May 5, 2022 · 3 min

unsafe类了解

unsafe类 JDK 的此jar包中 的 Unsafe 类提供了硬件级别的原子性操作 ,Unsafe 类中的方法都是native 方法 ,它们使用JNI的方式访问本地 C++实现库。 使用unsafe类 完成copareAndSwap /** * @author ggBall * @version 1.0.0 * @ClassName UnsafeSateTest.java * @Description 获取不到unsafe app类加载器加载不到 unsafe 因为unsafe只允许bootstrap类加载器获取,Unsafe.getUnsafe()里面也做了判断只允许bootstrap类加载器加载 * @createTime 2022年04月30日 16:44:00 */ public class UnsafeSateTest { static final Unsafe unSafe = Unsafe.getUnsafe(); static long stateOffset = 0; private volatile long state = 0; static { try { // 拿到 属性state在类UnsafeSateTest的偏移量 stateOffset = unSafe.objectFieldOffset(UnsafeSateTest.class.getDeclaredField("state")); } catch (NoSuchFieldException e) { e.printStackTrace(); } } public static void main(String[] args) { UnsafeSateTest unsafeSateTest = new UnsafeSateTest(); boolean result = unSafe.compareAndSwapLong(unsafeSateTest, stateOffset, 0, 1); System.out.println("result = " + result); } } /** * @author ggBall * @version 1.0.0 * @ClassName UnsafeSateTest.java * @Description 利用反射获取unsafe * @createTime 2022年04月30日 16:44:00 */ public class UnsafeSateTest2 { static Unsafe unSafe; static long stateOffset = 0; private volatile long state = 0; static { try { Field theUnsafe = Unsafe.class.getDeclaredField("theUnsafe"); theUnsafe.setAccessible(true); // 获取该变量的值 unSafe = (Unsafe)theUnsafe.get(null); // 拿到 属性state在类UnsafeSateTest的偏移量 stateOffset = unSafe.objectFieldOffset(UnsafeSateTest2.class.getDeclaredField("state")); } catch (NoSuchFieldException | IllegalAccessException e) { e.printStackTrace(); } } public static void main(String[] args) { UnsafeSateTest2 unsafeSateTest = new UnsafeSateTest2(); boolean result = unSafe.compareAndSwapLong(unsafeSateTest, stateOffset, 0, 1); System.out.println("result = " + result); }

May 5, 2022 · 1 min

贫血模型与充血模型

实战一(下):如何利用基于充血模型的DDD开发一个虚拟钱包系统? 1. 什么是贫血模型?什么是充血模型? 贫血模型:只包含数据,不包含业务逻辑的类 充血模型:既包含数据,也包含业务逻辑的类 2. 为什么说基于贫血模型的传统开发模式违反 OOP? 这种贫血模型将数据与操作分离,破坏了面向对象的封装特性,是一种典型的面向过程的编程风格。 ...

May 4, 2022 · 2 min

设计原则

solid原则 单一职责原则、开闭原则、里式替换原则、接口隔离原则和依赖反转原则,依次对应 SOLID 中的 S、O、L、I、D 这 5 个英文字母。 单一职责 单一职责原则的英文是 Single Responsibility Principle,缩写为 SRP。这个原则的英文描述是这样的:A class or module should have a single reponsibility。如果我们把它翻译成中文,那就是:一个类或者模块只负责完成一个职责(或者功能)。 ...

May 4, 2022 · 12 min

什么是多线程并发编程

什么是多线程并发编程 了解什么是并发,什么是并行? 并发:一段时间内,执行多个没有结束的任务。 并行:单位时间内,同时执行多个任务。 注意:并发任务强调在一个时间段内同时执行,而一个时间段由多个单位时间累积而成,所以说并发的多个任务在单位时间内不一定同时在执行 ...

April 27, 2022 · 3 min
总访问量 总访客数