CreateArtTechnology / Blog
  • Java juc笔记 [2] - locks包接口部分
     4     2020-09-28 19:59:05

    Locks包简介java.util.concurrent包下的locks包提供了一系列同步工具,其功能在大体上跟synchronized差不多,但量级更轻更灵活,也更复杂。juc包下的多种用于同步的工具包括CyclicBarrier、LinkedBlockingQueue等都依赖这些同步工具。
    本次先研读Lock相关的接口及LockSupport类源码以了解常见的使用方式及需要注意的点。
    介绍Lock接口给特定资源加锁,即同时只有一个线程能访问该资源,其他资源要么等待获取锁后访问资源,要么放弃访问资源(具有排他性)。语义同Synchronized但在使用上更为灵活,且需要手动释放锁。
    在注释中提到的典型应用场景是:
    获取A的锁->获取B的锁->释放A的锁->获取C的锁->释放B的锁->获取D的锁……
    很明显,这种方式一旦使用不当非常容易产生死锁,这就是灵活带来的代价。
    ......

  • Java juc笔记 [1] - atomic包
     3     2020-08-03 21:50:36

    Atomic包简介及分类java.util.concurrent(一般简称juc)包下的atomic包提供了一系列在并发场景下尽量无锁实现原子操作的类,其核心思想是使用CAS+循环实现轻量级乐观锁,在并发竞争不激烈的情况下效率会比加锁实现好很多。除Striped64由JCP JSR-166 Expert Group成员协助完成外,作者都是Doug Lea大师。虽然juc包整体代码量不大但每次看都有新的思考和收获。
    原子包装类:
    AtomicBooleanAtomicIntegerAtomicLongAtomicReferenceAtomicIntegerArrayAtomicLongArrayAtomicReferenceArrayAtomicStampedReferenceAtomicMarkableReference
    属性更新类:
    AtomicIntegerFieldUpdaterAtomicLongFieldUpdaterAtomicReferenceFieldUpdater
    高并发计算类:
    ......

  • Java SPI机制的理解与应用
     4     2020-06-04 15:32:56

    背景一位前辈在一次技术分享中指出我们目前的包管理不规范,模块间职责有重叠,理解成本高不易维护,提出在开发过程中应当明确按照职责将服务划分到对应的模块中。
    比如我们把所有服务都放在service层,但其实服务也是分为基础服务和业务逻辑服务的,或许把类似业务数据查询组装服务放在service层,把具体业务逻辑服务统一放在business层会更好,更利于基础服务的复用。
    但当服务拆离到不同模块进行复用时,可能在开发过程中出现服务依赖的问题,这部分依赖问题的解耦可以用到Java的SPI机制。显然,我从来没有听说过SPI是什么,也不明白这有什么好处。
    SPI是什么翻遍各种网上资料,来来回回都是车轱辘话,互相抄来抄去讲得并不通俗易懂,这里就用我自己的理解来解释。
    SPI(Service Provider Interface),大意是“服务提供者接口”,是指在服务使用方角度提出的“接口要求”,是对“服务提供方”提出的约定,简单说就是:“我需要这样的服务,现在你们来满足”。
    API(Application Programming Interface)与之相对,是站在服务提供方角度提供的无需了解底层细节的操作入口,即“我有这样的服务可以给你使用”。
    ......



  • 背景在前公司时参与了一个编码竞赛,虽然只拿到一个中游成绩,但在参赛过程中学习到很多其他人优秀的思考方式,也接受了前辈的指点,尤其是在参赛时的一些知识面拓展对我帮助不小。其中一些平常很少接触到的知识对于之后的工作会有所帮助。
    题目很简单,大概是这样:
    在4G内存的机器上实现对大文件内容的按行排序文件每行为小写字母组成的不重复的一段字符串,最长为128字节文件大小有1G/2G/5G/10G/20G多种,很明显一部分文件是无法全部加载到内存中的
    具体过程及结果不细说,在这里简单介绍其中用到的部分NIO技术,这些技术无论在各种框架如Netty等,以及各种中间件如RocketMQ等都有用到。
    基本概念堆外内存我们都知道,JVM需要申请一块内存用于进程的使用,类、对象、方法等数据均保存在JVM堆栈也就是申请的这块内存之中,JVM也会负责帮我们管理和回收再利用这块内存。
    相对的,堆外内存就是直接调用系统malloc分配的内存,这部分内存不属于JVM直接管理,也不受JVM最大内存的限制,通过引用指向这段内存。
    ......


  • Cassandra简介
     9     2020-01-19 14:55:55

    Cassandra
    Cassandra是什么类似HBase,Cassandra也是一个开源的分布式数据库,适用于结构化的大数据存储。
    为什么使用Cassandra针对与关系型数据库的比较,可参考HBase简介一文的介绍。
    与HBase的比较:
    HBase
    Cassandra
    ......