随笔分类 -  多线程

1 2 3 4 下一页

AQS有没有伪共享【yetdone 重要】
摘要:tail与state离得很近: 很大可能会存在于同一个64字节缓存行 但通过加入117-119行代码做BC/AC测试,并未发现显著性能差异,猜测为业务代码本身耗时已经远大于cache miss的影响 如果需要进一步论证: 1)perf查看一级缓存miss,但是这并不是有力证据 2)以fake.Abs 阅读全文

posted @ 2025-08-05 22:27 silyvin 阅读(16) 评论(0) 推荐(0)

跨线程threadlocal
摘要:1 装饰器 core data https://blog.csdn.net/avatar6780/article/details/135246200 public class ThreadLocalTransferDecorator { public static Runnable decorate 阅读全文

posted @ 2025-08-03 14:50 silyvin 阅读(22) 评论(0) 推荐(0)

java锁的系统调用 futex 与内存屏障
摘要:https://blog.csdn.net/xvktdmjg/article/details/114230993 1 aqs cas 总线锁 LOCK#信号就是我们经常说到的 总线锁 ,处理器使用 LOCK# 信号达到锁定总线,来解决原子性问题,当一个处理器往总线上输出LOCK#信号时,其它处理器的 阅读全文

posted @ 2025-06-23 23:06 silyvin 阅读(70) 评论(0) 推荐(0)

再谈ArrayBlockingQueue/LinkedBlockingQueue和Disruptor
摘要:1 ArrayBlockingQueue 循环数组 ringbuffer 一把锁 3个属性伪共享 cpu缓存友好 2 LinkedBlockingQueue 无法避免在队列中只有一个元素时的线程安全问题。 为解决上述问题,LinkedBlockingQueue的head节点始终指向一个空节点(在构造 阅读全文

posted @ 2025-06-21 23:57 silyvin 阅读(49) 评论(0) 推荐(0)

生产者消费者线程模型事故
摘要:一次不引用包跑外部依赖的实践(六)代码打磨 阅读全文

posted @ 2025-03-03 01:29 silyvin 阅读(17) 评论(0) 推荐(0)

java object多大 java对象内存模型 数组有多长(十三)future task cancel (二)向下传递中断【重要】
摘要:future task cancel (二)向下传递中断【重要】- java object多大 java对象内存模型 数组有多长(十三) 阅读全文

posted @ 2025-01-29 14:39 silyvin 阅读(6) 评论(0) 推荐(0)

java object多大 java对象内存模型 数组有多长(十四)内存安全 & 完结
摘要:1 此前用的分段锁,虽然现在变单线程环境了,但是桶仍然可以继续分 用一个桶到中程性能极具下降 分桶后10个数据块耗时分布均匀 可以按实际情况一直分下去,比如100,200 2 一段时间后20个桶都不够了,忘记改了啥了 改成200试下,结果并没啥用,但特点是卡在同一个10万数据块,意味着性能下降是非线 阅读全文

posted @ 2024-12-20 15:45 silyvin 阅读(17) 评论(0) 推荐(0)

java object多大 java对象内存模型 数组有多长(十二)放弃锁
摘要:1 全局锁,240小时 分段锁8个桶,15小时 单线程1个桶,中程long running 单线程 20个桶7小时 2 能不能乐观锁?这个场景其实应该用乐观锁。IdentityHashMap的可见性没法解决 3 不锁,容忍误差? 与2其实本质相同,乐观锁其实锁了个寂寞 阅读全文

posted @ 2024-12-09 22:32 silyvin 阅读(8) 评论(0) 推荐(0)

threadlocal变量要不要volatile
摘要:循环日志 由这篇日志引出的奇怪的问题 原文的目的是尽早回收ThreadMap里的非活跃对象,不要搞的map太大 手段是从外部将所有 各种对象所引用的Threadlocal强制set为null,那么要强刷掉这些对象所在线程的缓存,则threadlocal对象也应该如内存泄漏事故(二)线程的中断不可信任 阅读全文

posted @ 2024-12-02 23:14 silyvin 阅读(14) 评论(0) 推荐(0)

循环日志
摘要:0 不允许在循环内打日志 1 主要策略:限制某个循环体内打日志的次数 主要困难:调用链太长,传递循环当前次数要改很多方法,类似于事务的connction,这种不方便传递参数的东西就想到了threadlocal 2 不想永久某线程到100就一直不让打了,想第二天的job清0 同时也不想用timer—— 阅读全文

posted @ 2024-11-01 21:31 silyvin 阅读(24) 评论(0) 推荐(0)

增加代码时怎么样降低风险,超时意识【重要】
摘要:1 try catch throuable 2 避免主线程阻塞,要另起线程,用future.get超时机制 必要时放弃子线程,确保主线程不被阻塞;但应强制回收子线程的指针:内存泄漏事故(二)线程的中断不可信任【重要】强制回收 阅读全文

posted @ 2024-08-30 00:26 silyvin 阅读(15) 评论(0) 推荐(0)

内存泄漏事故(四)future能否感知error
摘要:必须new才会加载,=null不会 首先最好先证明加载不了的类确实是在futrue真正run的时候加载的,而不是在定义future的时候,因为题目是future能否感知,如果在主线程定义时加载则不准确 可以看到ExecutionException包裹了NoClassDefFoundError 关于n 阅读全文

posted @ 2024-08-17 11:56 silyvin 阅读(17) 评论(0) 推荐(0)

内存泄漏事故(三)线程的interrupted flag 的坑【重要】
摘要:背景: 子线程中,分线程处理然后聚拢 future。get 但是在futureget的异常处理中,并未抛出异常,只是调用Thread.currentThread().interrupt(), 因此主线程要监控这个interrup旗标,从而决定是否抛出异常 1 起先 发现没什么用 2 旗标的生命周期 阅读全文

posted @ 2024-08-17 11:33 silyvin 阅读(20) 评论(0) 推荐(0)

内存泄漏事故(二)线程的中断不可信任【重要】配合volatile强制回收子线程成员变量
摘要:1 Map<k, list> not good: map.remove(k) 如果这时有其他指针指向list,则list无法释放 good: map.get(k).clear() map.remove(k) 即使这是有其他指针指向list,导致list无法释放,但是这个list是空的,泄漏的后果不严 阅读全文

posted @ 2024-08-02 00:24 silyvin 阅读(31) 评论(0) 推荐(0)

future task cancel (二)向下传递中断【重要】- (java object多大 java对象内存模型 数组有多长(十三))
摘要:1 测试用例 当future.get响应interruptedexception时,意味着外界想要中断你这个线程和所有子任务 那么应当在interruptedexception响应中对future进行cancel 60 61 行一样结果 应当在38行处中断子任务writeTask 2 实例 1)主线 阅读全文

posted @ 2024-08-01 21:10 silyvin 阅读(23) 评论(0) 推荐(0)

java object多大 java对象内存模型 数组有多长(八)多线程cas
摘要:0 背景 在 java object多大 java对象内存模型 数组有多长(四)已经访问的对象记录优化 中,用byte数组处理,现在它将暴露在多线程中 借鉴concurrenthashmap的做法 Unsafe控制ConcurrentHashMap内并发数组元素的可见性 1双检分段锁 get if 阅读全文

posted @ 2024-06-19 15:13 silyvin 阅读(12) 评论(0) 推荐(0)

java object多大 java对象内存模型 数组有多长(七)偏向锁
摘要:https://blog.51cto.com/u_15082395/2590044 深度解析默认 hashCode() 的工作机制 biased object是偏向锁定的结果。这个功能获得了专利,自HotSpot 6开始引入,用来降低对象锁定带来的开销。由于具体实现依赖CPU原子指令(CAS),因此 阅读全文

posted @ 2024-06-18 16:55 silyvin 阅读(23) 评论(0) 推荐(0)

future task cancel
摘要:1 FutureTask.cancel 干了啥 //有一个入参,需要说明task是否是可中断的 public boolean cancel(boolean mayInterruptIfRunning) { if (state != NEW) return false; if (mayInterrup 阅读全文

posted @ 2023-09-04 20:33 silyvin 阅读(40) 评论(0) 推荐(0)

双检锁的另一种形式
摘要:背景:sonar对volatile和synchronized不友好,项目背景:mybatis guice 事务代理切面 private ThreadLocal<Integer> getTrasactionStatus(project_DB_TRANSACTIONAL projectDbTransac 阅读全文

posted @ 2022-07-25 21:31 silyvin 阅读(32) 评论(0) 推荐(0)

局部变量的可见性
摘要:1 问题的引出 局部变量跨线程,又不能用volatile,怎么保证其可见性 2 是否真的能有局部变量跨线程写入? 看一下这段代码: public static void main(String []f) { Integer integer = 1; new Thread(new InnerThrea 阅读全文

posted @ 2021-07-02 17:03 silyvin 阅读(148) 评论(0) 推荐(0)

1 2 3 4 下一页