Java
xzchaoo
社畜
展开
专栏收录文章
- 默认排序
- 最新发布
- 最早发布
- 最多阅读
- 最少阅读
-
加速Maven构建
加速Maven构建原创 2023-04-06 14:09:41 · 476 阅读 · 0 评论 -
ArrayList批量移除元素
ArrayList<...> list = ...;// 批量移除list位置 [3, 6)list.subList(3,6).clear();// 批量移除list中满足某条件的元素list.removeIf(...);批量的意义在于相比自己写for循环, 它的效率更高是O(n), 而我们自己写for循环如果没留意最坏情况下会降级成O(n^2)....原创 2021-04-27 11:18:16 · 1309 阅读 · 0 评论 -
并发编程中的WIP技巧
介绍遇到如下场景:对于某个方法, 调用它时如果有另外一个线程正在调用该方法, 那么当前线程放弃调用, 但另外一个线程调用完毕之后必须再调用一次该方法.比如, 多个线程更新一个数据结构(这个行为是否并发安全不在本次讨论中), 然后一旦结构发生修改就将数据同步到DB. 显然同步到DB是一个相对高耗时的行为, 而且短期对数据结构的更新显然可以压缩成一次DB的更新. 这也就是我上述说的场景了.wip技巧wip = Working-In-Progress这种模式我也不知道该怎么称呼, 但我在很多地方都有原创 2021-02-19 15:11:48 · 592 阅读 · 0 评论 -
ClassValue
与ThreadLocal类似, ClassValue的作用可以说是ClassLocal.如果你有一些缓存是以Class<?>为key, 那么可以考虑用ClassValue代替. 对于动态生成的类, 不会导致其无法被回收.原创 2021-02-04 13:46:31 · 608 阅读 · 0 评论 -
Maven部署到指定仓库
mvn clean deploy -DskipTests -DaltDeploymentRepository=server_id::default::仓库地址server_id: 会用于在 settings.xml 寻找server, 其账号密码用于鉴权. default: 是layout, 现在固定都是default 仓库地址:原创 2020-10-23 12:36:12 · 1150 阅读 · 0 评论 -
GRPC的context级联关闭导致请求被cancel
背景线上遇到奇怪的GRPC请求失败, 看日志提示 context is cancelled. 而且报错时间与请求发出的时间很接近, 根本还没达到超时时间.我们有如下场景ServiceA -异步-> ServiceB -异步-> ServiceC服务A调用服务B, B收到请求之后又会去请求服务C.B返回给A的结果并不依赖B请求C的结果, 因此B会尽快返回给A.分析一旦B返回, B与A之间的context就被cancel, 而B与C的context是继承于前者..原创 2020-10-12 16:19:25 · 4703 阅读 · 2 评论 -
DrainLoop编程技巧
介绍最近项目里频繁涉及到并发编程, 由于我们的系统不需要强一致性, 我选择使用各种并发集合来避免锁. 项目里还大量使用了MPSC的队列(基于JCTools)和Disruptor. 另外还涉及到一些异步编程, 这里使用了Reactor来简化异步流程.之前看过Reactor/RxJava2的一些源码, 在源码里发现了一个很好用的小技巧, 我也不知道叫什么名称, 但看方法名一般是叫"drainLoop", 我就称这种技巧为DrainLoop吧.drainLoop的使用场景是这样的:在一个MPSC(原创 2020-06-16 20:52:03 · 405 阅读 · 1 评论 -
Java线程池的关闭, shutdown和shutdownNow的区别
Java线程池shutdown和shutdownNow的区别结论先说结论shutdown 标记关闭 + 会执行积压任务(因线程不足而放入queue里的) + 不打断正在执行的任务, 之后不允许添加新任务 shutdownNow = 标记关闭+ 不执行积压任务 + 打断(通过线程interrupt)正在执行的任务, 之后不允许添加新任务 对于停不下来的任务只能等到任务结束, 此过程 isTerminating 返回 true, 可以使用 awaitTemination 阻塞地等到真正关闭 .原创 2020-06-08 11:36:14 · 603 阅读 · 0 评论 -
线程安全的一些建议
介绍我比较认同的线程安全的定义: "一段代码, 被多线程访问, 多线程之间不需要任何显式的协同, 并且运行结果是正确的, 那么这段代码就是线程安全的".线程安全的程度Immutable: 不可变 Thread-safe: 单线程下行为正确, 多线程下行为也正确, 要求很高 Conditionally thread-safe: 有条件的线程安全 Thread-Compitable: 线程兼容, 本来非多线程安全, 但可以通过显示的外部同步来获得安全 Thread-hostile: 线.原创 2020-06-02 15:48:08 · 224 阅读 · 0 评论 -
Java 高效数组复制
介绍实践中经常需要复制数组的一段连续内容, 比如给一个数组追加一个元素形成一个新数组. 那么怎样做才是较快的呢?测试方法1: 自己new数组, 然后for循环复制方法2: 使用 Arrays.copyOf, 或 System.arraycopy. 本质前者是基于后者的, 两者性能相当, 前者多了2次native调用获取数组元素类型和创建数组.@Warmup(iterations = 2, time = 3)@Measurement(iterations = 3, time = 3)原创 2020-06-01 15:54:11 · 852 阅读 · 0 评论 -
byte-buddy
介绍先占个坑.因工作需要, 调研了byte-buddy, 并尝试用它实现了各种功能, 都记录下来吧…原创 2020-04-06 23:24:26 · 447 阅读 · 0 评论 -
Java 的日志门面与实现
Java 的日志门面与实现原创 2020-04-03 01:52:43 · 231 阅读 · 1 评论 -
Reactor的parallel不支持工作窃取
使用Rx系列框架也有2年多了,真的感觉它在项目就像是万金油, 哈哈.项目里经常有并发请求外部系统(然后合并结果,这个今天先不考虑)的情况.这里给出一个场景:需要调用N次外部系统,调用无返回值,只需要确保调用结束即可,可以不处理异常情况,但需要确保全部调用都完成程序才能继续执行下去.如果自己去写代码实现这里就不说了,大概就是:拿到一个线程池,提交多个任务,根据情况b...原创 2020-02-27 15:13:25 · 440 阅读 · 0 评论 -
Guava - EventBus
EventBus介绍EventBus是Guava包里的一个辅助类, 用于实现消息总线模式.生产事件的叫做Provider, 消费事件的叫做Subscriber, 他们之间通过事件类型产生关联.The EventBus guarantees that it will not call a subscriber method from multiple threads simul...原创 2020-02-25 12:02:03 · 257 阅读 · 0 评论 -
String.split的坑
介绍某一天使用Spring.split方法对字符串进行拆分, 发现拆分后的数量似乎不太对劲...String.splitsplit方法有2个重载版本:split(String) 相当于 split(String, -1) split(String, max): 按给定的分隔符进行分割, 如果max>0则最多分出max个结果其实这都不是关键.看了split的...原创 2020-02-03 18:55:54 · 342 阅读 · 0 评论 -
关于线程安全的考虑
结论结合当前框架的线程模型不可变对象/无状态化原子操作线程本地锁原创 2019-07-23 09:15:51 · 140 阅读 · 0 评论 -
Atomic Updater vs. Atomic Wrapper
介绍参考资料https://javamex.com/tutorials/synchronization_concurrency_7_atomic_updaters.shtml原创 2019-07-23 09:03:15 · 172 阅读 · 0 评论 -
CPU分支预测对Java程序的影响
回忆课上教的, 和几篇博文https://blog.youkuaiyun.com/rrrfff/article/details/44993467?ticket=ST-106021-6fOewnguwhi3rUrgYAUb-passport.youkuaiyun.com都提到了分支预测正确时可以给程序带来一定的性能提升, 为此利用JMH写了个简单的测试例子, 但并没有得到想要的结论:@BenchmarkMode(Mode....原创 2018-05-24 23:40:53 · 433 阅读 · 0 评论
分享