
Java
Java
霄云之志
这个作者很懒,什么都没留下…
展开
-
构建树形结构
构建树形结构定义树对象构建对象返回体我们在业务中或多或少都会遇到构架树结构的情况,我这也是简单记录一下。定义树对象public class InvGroupDetailTreeNode { @ApiModelProperty( value = "节点ID", notes = "规则 产品节点ID:公司ID||'_'||产品ID,单元节点ID:公司ID||'_'||产品ID||'_'||单元ID,组合节点ID:公司ID||'_'||产品ID||'原创 2022-01-05 15:40:48 · 447 阅读 · 0 评论 -
关于 sharding 使用 ON DUPLICATE KEY UPDATE 中 VALUES 方法失效的原因
其实也不是失效,而是我自己没有仔细观察背景:由于使用到了分库分表,数据库被 sharding jdbc 代理mysql 提供了 主键冲突时 进行更新操作的语句 ON DUPLICATE KEY UPDATE但是我在使用的时候,因为数据库被代理,所以在 ON DUPLICATE KEY UPDATE语句中不能使用#{},${}, 需要使用VALUES方法。于是就有了下面的这个语句INSERT INTO `moyu_user_session_hist` ( platform_i原创 2021-01-25 18:19:48 · 3320 阅读 · 12 评论 -
Java并发之线程池浅析
线程池的主要构造方法第一种:newFixedThreadPool 方法创建一个固定数量的线程池,用于处理多个任务ExecutorService executorService = Executors.newFixedThreadPool(3);public static ExecutorService newFixedThreadPool(int nThreads) { return new ThreadPoolExecutor(nThreads, nThreads,原创 2020-10-09 17:48:25 · 126 阅读 · 0 评论 -
Java并发之ThreadLocal浅析
ThreadLocal :顾名思义,线程本地变量原创 2020-09-21 15:41:34 · 179 阅读 · 0 评论 -
Java并发之CyclicBarrier浅析
CyclicBarrier 是什么?CyclicBarrie允许让一组线程到达一个屏障(也可以叫同步点)时被阻塞,直到最后一个线程到达屏障时,屏障才会开门,所有被屏障拦截的线程才会继续运行。CyclicBarrier只能唤起一个任务,CountDownLatch可以同时唤起多个任务CyclicBarrier可重用,CountDownLatch不可重用,计数值为0该CountDownLatch就不可再用了代码分析:public class MyTest2 { public static原创 2020-08-21 12:04:00 · 267 阅读 · 0 评论 -
Java并发之CountDownLatch浅析
CountDownLatch 是什么?CountDownLatch基于AQS的共享模式,用来控制一个或者多个线程等待多个线程基本思想:内部存在计数器,当所有的子线程都执行到指定的地点,通过给Count 值 做减法,直到为 0 时,然后在CountDownLatch上等待的线程就可以恢复执行接下来的任务实例分析:public class MyTest1 { public static void main(String[] args) { CountDownLatch cou原创 2020-08-20 16:56:30 · 207 阅读 · 0 评论 -
锁消除和锁粗化浅析
锁消除锁消除是编译器对于锁的优化措施,在JIT编译器可以在动态编译同步代码时,使用一种逃逸分析的技术,来通过该技术判别程序中所使用的锁对象是否只被一个线程所使用,而没有散布到其他线程中;如果这种情况的话,那么JIT在编译这个同步代码时就不会生成synchronized关键字所标识的锁的申请与释放机器码,从而消除了锁的使用流程。public class MyTest4 { public void method() { Object object = new Object()原创 2020-08-17 12:13:56 · 628 阅读 · 0 评论 -
Java 并发之 wait 和 sleep 区别
wait 和 sleep 到底有什么区别sleep 方法存在于 Thread类中,而 wait 方法存在于Object类中sleep 在调用的时候不会去释放对象的锁,wait 会释放对象锁,这也是为什么 wait,notify和notifyAll只能在同步控制方法或者同步控制块里面使用,因为在调用wait的时候会释放锁,所以必须得先获得锁,那么获取对象锁的方式有哪些呢?synchronized 关键字 修饰静态方法synchronized 关键字 修饰实例方法synchronized 关键字原创 2020-08-06 16:52:52 · 123 阅读 · 0 评论 -
关于Mybatis的小水坑之参数问题
在项目中使用到了Mybatis框架,在写sql语句做一些条件过滤的时候,如果传入的参数是Integer类型,并且传入的是0,那么Mybatis会自动将该参数转化为"",也就是空串。原创 2020-07-02 10:55:01 · 164 阅读 · 0 评论 -
Java monitor 实现
monitor 是操作系统提出来的一种高级原语,但其具体的实现模式,不同的编程语言都有可能不一样。以下以 Java 的 monitor 为例子,来讲解 monitor 在 Java 中的实现方式。在Java中,一个对象对应了一个momitor对象,而synchronized关键字也需要关联一个对象,这个对象需要天生就支持monitor,所以在Java中,可以就是Java 中的 java.lang.Object 类,便是满足这个要求的对象,任何一个 Java 对象都可以作为 monitor 机制的 mon原创 2020-06-29 16:25:02 · 886 阅读 · 0 评论 -
Synchronized 的锁升级
搜索原创 2020-06-29 09:40:53 · 225 阅读 · 0 评论 -
Synchronized使用方法
在工作中,遇到多线程的问题,我们可能会添加synchronized关键字,特别方便,主要还是它是java提供的,其内部帮助我们做了很多优化,接下来,我们慢慢分析一波。众所周知,synchronized包括对象锁和类锁。第一种:类锁指synchronize修饰静态的方法或指定锁对象为Class对象,在java中,每个类都有一个class 对象,当我们使用synchronized修饰class对象时或者静态方式时,就相当于锁住了class对象。public class SynchronizedObjec原创 2020-06-08 11:08:26 · 237 阅读 · 0 评论 -
ArrayList 源码分析
ArrayList 分析本人是基于Java8分析的。其实我认为ArrayList分为两步分析,第一步是分析它的构造方法,它的构造方法其实挺有意思的,一会慢慢讲,第二步就是分析它的Add方法,当然了,还有其他方法也会看看的,但是主要的还是Add方法ArrayList 底层使用的是动态数组,是连续的内存空间,对于数据的查询比较快。对于插入和删除需要移动内存,所以比较慢。它是线程不安全的。属性 ...原创 2019-12-23 09:20:16 · 99 阅读 · 0 评论