随笔分类 -  Jdk

摘要:代码规约 命名规约 禁止拼音与英文混用 驼峰 DO,BO,DTO,VO,AO,UID等除外 pojo类中的任何布尔类型的变量都不要加is前缀 不允许任何的魔法值 Long复制用L大写 推荐规约: 跨应用共享常量:放置在二方库中,通常是client.jar中的constant目录下 OOP规约 覆盖方 阅读全文
posted @ 2021-03-01 20:30 l2c 阅读(289) 评论(0) 推荐(0)
摘要:场景: 某个定时任务需要多线程执行,执行时间较久且每天只跑一次,想单独拉出一个线程池和其他业务隔离开,交给spring会导致核心线程一直存在 浪费线程资源,因此想单独拉一个池子用完就丢,原本想的是,在execute之后,核心线程会随着线程池对象的回收而回收,后来转念一想,核心线程池怎么回收?写了个m 阅读全文
posted @ 2020-11-19 00:10 l2c 阅读(1649) 评论(0) 推荐(0)
摘要:java.util.concurrent.RejectedExecutionException: Task com.personal.practice.jvm.Jstacktest$1@7d605a5a rejected from java.util.concurrent.ThreadPoolExe 阅读全文
posted @ 2020-11-17 15:20 l2c 阅读(238) 评论(0) 推荐(0)
摘要:core和非core的区别: 当线程数小于core size时我们取task是这么取得: 小于时用poll并设置超时时间,否则用take阻塞等待 第二条件就出去了 没有拿到task的worker线程会结束掉while,退出执行 阅读全文
posted @ 2020-10-10 18:31 l2c 阅读(128) 评论(0) 推荐(0)
摘要:转载: https://blog.csdn.net/hellozhxy/article/details/91972846 阅读全文
posted @ 2020-09-27 00:21 l2c 阅读(254) 评论(0) 推荐(0)
摘要:ReadLock: 都是委托给外部类的sync对象: 获取读锁: protected final int tryAcquireShared(int unused) { /* * Walkthrough: * 1. If write lock held by another thread, fail. 阅读全文
posted @ 2020-09-13 21:26 l2c 阅读(168) 评论(0) 推荐(0)
摘要:可以看到区别在于,在lock时和tryAquire时,非公平锁不会去管队列中有没有线程在排队,直接尝试去获取锁,失败之后就和公平锁一样,乖乖去排队。 也就是说发生竞争的场景在于,尚未入队的线程之间和刚被unpark的之后的线程之间的竞争 阅读全文
posted @ 2020-09-12 00:07 l2c 阅读(328) 评论(0) 推荐(0)
摘要:实例: 一个接口 一个实现 一个配置 一个main: 源码: 成员 注意这里是Thread Context ClassLoader。 在线程初始化的时候,会取父线程的ClassLoader,全局没有的话 最后会是应用程序类加载器。 获取一个classLoader: 整体看下来好像没有这么神秘,在ha 阅读全文
posted @ 2020-07-24 21:28 l2c 阅读(146) 评论(0) 推荐(0)
摘要:老规矩: 一个锁,一个队列。 不带参数的构造器,初始化一个长度为0?的对象数组。 collection参数的构造方法,直接array=c.toArray(); 数组入参array=arrays.copy。 进入正题: 可以看到它是先加了锁,然后新copy一个length+1的数组,设值之后再将新数组 阅读全文
posted @ 2020-07-17 20:43 l2c 阅读(114) 评论(0) 推荐(0)
摘要:一样的先看看成员有哪些: 以上都是hashmap中有的成员下面是一些新的: 再来看节点信息: 构造方法: 可以看到currentHashMap在初始化的时候用的size并不是像hashmap那样直接用initialCapacity,而是用除以负载因子之后容量或者1.5倍为基础选择最小的2的次幂。 S 阅读全文
posted @ 2020-07-14 20:42 l2c 阅读(272) 评论(0) 推荐(0)
摘要:三个内部类 当指定公平锁参数时: 所有的方法都委托给sync: AQS(AbstractQueuedSynchronizer): 一个抽象类: 维护了一个FIFO队列: 队列的节点结构如下: 构造方法: 父类维护了一个Thread对象,表示当前占用该锁的线程,并且提供了相应的get,set方法: 简 阅读全文
posted @ 2020-07-13 19:26 l2c 阅读(156) 评论(0) 推荐(0)
摘要:关于synchronized的文档: https://docs.oracle.com/javase/specs/jvms/se8/html/jvms-6.html#jvms-6.5.monitorenter 看下同步方法: 从编译的结果来看,方法的同步并没有通过指令 monitorenter 和 m 阅读全文
posted @ 2020-07-12 16:17 l2c 阅读(109) 评论(0) 推荐(0)
摘要:一个BlockingQueue,用于放置实现了Delayed接口的对象,其中的对象只能在其到期时才能从队列中取走。这种队列是有序的,即队头的对象的延迟到期的时间最长。如果没有任何延迟到期,那么就不会有任何元素,并且poll将返回null 构造方法: 入队: emmm放到堆里,如果是在堆顶的话就sig 阅读全文
posted @ 2020-07-12 11:01 l2c 阅读(109) 评论(0) 推荐(0)
摘要:默认大小11 构造器: 比较疑惑的是下面这个构造器: 当是SortedSet时,是这样处理其数组成员的: 在AbstractCollection中找到了toArray的实现: 看下treemap的迭代器: 中序遍历: 对于一般的集合: 扩容: add: poll: 阅读全文
posted @ 2020-07-12 06:09 l2c 阅读(133) 评论(0) 推荐(0)
摘要:相似的套路。 构造方法: add: 阅读全文
posted @ 2020-07-11 16:10 l2c 阅读(110) 评论(0) 推荐(0)
摘要:LinkedHashSet继承了HashSet,在类里只有了了几个构造方法,还记得之前HashSet的包访问权限的构造方法吗,这里全部用的这个构造方法: 阅读全文
posted @ 2020-07-11 15:52 l2c 阅读(89) 评论(0) 推荐(0)
摘要:构造器: 注意最后一个构造方法的访问权限 迭代器也是用了HashMap内部类的迭代器: add方法: add方法调用了map的put,value为object常量: 阅读全文
posted @ 2020-07-11 15:37 l2c 阅读(116) 评论(0) 推荐(0)
摘要:头尾指针 节点:双向链表 构造方法: 阅读全文
posted @ 2020-07-11 00:07 l2c 阅读(92) 评论(0) 推荐(0)
摘要:ArrayList: 构造器: 看一下add方法: 初始化最小大小为10: 当add之后的size大于当前数组长度的时候进行一次扩容: 新的数组大小是原数组大小的1.5倍。最后Arrays.copyOf到新的数组。 看一下迭代器: 在next的时候会比较最新modcount和初始化时候的区别,有区别 阅读全文
posted @ 2020-07-10 22:31 l2c 阅读(125) 评论(0) 推荐(0)
摘要:LinkedHashMap继承了HashMap: 看下节点结构: 在hashmap的节点上补充了前后2个指针。 维护了整个节点链表的头指针和尾指针 构造方法: 无脑抄就完事了 如果accessOrder为true的话,则会把访问过的元素放在链表后面,放置顺序是访问的顺序 如果accessOrder为 阅读全文
posted @ 2020-07-10 20:48 l2c 阅读(112) 评论(0) 推荐(0)