随笔分类 -  Java技术

Java基础技术,或者与融入Java的相关理念
摘要:我相信大家都很熟悉DCL,对于缺少实践经验的程序开发人员来说,DCL的学习基本限制在单例模式,但我发现在高并发场景中会经常遇到需要用到DCL的场景,但并非用做单例模式,其实DCL的核心思想和CopyOnWrite很相似,就是在需要的时候才加锁;为了说明这个观点,我先把单例的经典代码防止如下: 先说明 阅读全文
posted @ 2018-08-24 23:09 饭小胖 阅读(468) 评论(0) 推荐(0) 编辑
摘要:Java都有哪些锁? synchronized 和 reentranlock是最常见的,其中前者又JVM提供实现,后者有专门对应的java.util.concurrent包提供;同时后者功能更加丰富、灵活 悲观锁和乐观锁 悲观锁认为,每一次走进同步代码都可能发生线程安全问题,因此只要触及代码块都会加 阅读全文
posted @ 2018-07-01 17:13 饭小胖 阅读(290) 评论(0) 推荐(0) 编辑
摘要:模型: AQS是整个Current包的核心,Volatile和CAS是可以保证设置state值的原子性,下面是AQS的整个构造: 就是上图的构造,结合volatile(上图的volatile int state),CAS(各种如compareAndSetTail()方法),for(;;)自旋,整个c 阅读全文
posted @ 2018-04-28 00:40 饭小胖 阅读(519) 评论(0) 推荐(0) 编辑
摘要:面试荔枝FM杯具,遂死磕AQS途中发现一个有趣的模版用法,记下来。 模版方法是很重要的设计模式,在数据访问层、众多的插件接口都可见其影子,一般的实现都是在模版中定义抽象方法并使用其方法进行算法,让具体的模版定义定制的功能,类似: 然而有时候你可能没办法让productA() 称为抽象方法,比喻你需要 阅读全文
posted @ 2018-04-28 00:13 饭小胖 阅读(393) 评论(0) 推荐(0) 编辑
摘要:内存分配: 为对象分配内存有两种方式,第一种是“指针碰撞”,也就是把内存分为两边,一边是已使用区域,另一边是未分配区域,分界线用指针记录,当要分配内存时,只需把指针向未分配区域移动需要的空间即可,通常compact算法的垃圾回收会使用“指针碰撞”,如Serial、ParNew;另一种是空闲列表记录, 阅读全文
posted @ 2018-04-22 01:19 饭小胖 阅读(212) 评论(0) 推荐(0) 编辑
摘要:前言: 用户程序进行IO的读写,依赖于底层的IO读写,基本上会用到底层的read&write两大系统调用。在不同的操作系统中,IO读写的系统调用的名称可能不完全一样,但是基本功能是一样的。 这里涉及一个基础的知识:read系统调用,并不是直接从物理设备把数据读取到内存中;write系统调用,也不是直 阅读全文
posted @ 2018-04-12 11:06 饭小胖 阅读(584) 评论(0) 推荐(0) 编辑
摘要:本文主要记录自己对于多线程安全的学习,先来记几个线程安全模型。 首先最重要的当然是volatile和AQS了; 我们知道,整个java.cuncurrent包的核心就是volatile,CAS加自旋悲观锁;本文作为拓展所用不会详细介绍这些的特性,反之我已经滚瓜烂熟了; 2018.5.10 今日想更新 阅读全文
posted @ 2018-03-11 21:16 饭小胖 阅读(1075) 评论(0) 推荐(0) 编辑
摘要:转发的代码,原理就不提了 下面直接上代码: QuartzManager.java 动态添加、修改和删除定时任务管理类 1 import org.quartz.CronScheduleBuilder; 2 import org.quartz.CronTrigger; 3 import org.quar 阅读全文
posted @ 2018-03-08 20:46 饭小胖 阅读(203) 评论(0) 推荐(0) 编辑
摘要:Timer作为JDK提供的util工具,不太适合作为周期调度任务,只适合简单的定时操作(按照一定时间频率出发任务),在java的领域解决方案中,Quartz无疑是翘楚。 Timer的调度方法有: 阅读全文
posted @ 2018-02-05 23:47 饭小胖 阅读(571) 评论(0) 推荐(0) 编辑
摘要:HashMap在Java8之后就不再用link data bins了,而是转为用Treeify的bins,和之前相比,最大的不同就是利用了红黑树,所以其由 数组+链表+红黑树 组成。: * This map usually acts as a binned (bucketed) hash table 阅读全文
posted @ 2018-01-21 10:14 饭小胖 阅读(351) 评论(0) 推荐(0) 编辑
摘要:用法 ThreadLocal是用空间换时间来解决线程安全问题,方法是各个线程拥有自己的变量副本。 既然是涉及线程安全,必然有一个共享变量,声明一个: public class Singleton { private Connection connection = DataSourceUtil.get 阅读全文
posted @ 2018-01-12 00:40 饭小胖 阅读(358) 评论(0) 推荐(0) 编辑
摘要:我相信从学习计算机面向对象编程起就很多人背下了继承、封装、多态三个特性,可是多态并不是那么好理解的。通常做几道题,背下几次多态的动态绑定规律,可是依旧在一段时间后忘记了多态的存在,为什么要多态,这个程序为何会产生这样的结果呢? 先看多态的两个必要条件:继承、重写。 thinking in java 阅读全文
posted @ 2017-12-15 00:50 饭小胖 阅读(210) 评论(0) 推荐(0) 编辑

点击右上角即可分享
微信分享提示