随笔分类 -  多线程

1 2 3 下一页

生产者消费者线程模型事故
摘要:1 异常没有往上抛,也没有打日志 解决: 1 往上抛 2 可以不抛,但要打日志,并break(因为下一个future.get继续会被interruptedException) 2 生产者的get应当放到最后或着不放,所有消费者挂掉,线程显示生产者阻塞,没有消费者,程序一直卡在第一个future,且没 阅读全文

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

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

posted @ 2025-01-29 14:39 silyvin 阅读(1) 评论(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 阅读(1) 评论(0) 推荐(0) 编辑

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

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

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

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

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

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

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

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

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

posted @ 2024-08-17 11:33 silyvin 阅读(8) 评论(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 阅读(15) 评论(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 阅读(9) 评论(0) 推荐(0) 编辑

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

posted @ 2024-06-19 15:13 silyvin 阅读(3) 评论(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 阅读(3) 评论(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 阅读(19) 评论(0) 推荐(0) 编辑

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

posted @ 2022-07-25 21:31 silyvin 阅读(20) 评论(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 阅读(142) 评论(0) 推荐(0) 编辑

Unsafe控制ConcurrentHashMap内并发数组元素的可见性
摘要:出自:https://www.cnblogs.com/silyvin/p/9106613.html https://mp.weixin.qq.com/s?__biz=MzIwMzY1OTU1NQ==&mid=2247484057&idx=1&sn=c5fb63c68203001fa3a0545cef 阅读全文

posted @ 2021-06-29 15:51 silyvin 阅读(108) 评论(0) 推荐(0) 编辑

为什么内存锁在有事务切面的情况下会形同虚设 隔离级别与事务
摘要:1 事务里面加锁失效 myorm【重点】 25 2020.7.17 这就要求在事务代理外侧加锁 2 rr级别即使提交也不可见导致死循环 其它相关:jdk与mysql的cas乐观锁 阅读全文

posted @ 2021-06-07 16:08 silyvin 阅读(48) 评论(0) 推荐(0) 编辑

类加载的并发,单例模式,静态资源加载
摘要:1 全限定类在同一个类加载器只能加载一次,意味着static对象及代码块只一次,为单例之依据 如果并发发生,则阻塞 故类的加载不存在多线程,因为只执行一次,其他线程等着加载线程,由jvm来保证线程安全性 public class ByLoad { static { try { System.out. 阅读全文

posted @ 2020-10-09 23:30 silyvin 阅读(389) 评论(0) 推荐(0) 编辑

线程池的原理
摘要:本质就是利用无限循环run的thread➕BlockingQueue手写阻塞队列 2020.12.6 补充 务必注意线程池的有效shutdown机制,这关系到线程池被有效回收,具体可见:匿名野线程池导致oom 2021.3.9 本例子中,当没有任务时,并没有用BlockingQueue.take阻塞 阅读全文

posted @ 2020-04-27 23:43 silyvin 阅读(211) 评论(0) 推荐(0) 编辑

synchroned原理与对象头(yet)
摘要:结合对象头 https://mp.weixin.qq.com/s/KFgAY3g4tfuaKumVswID4A 阅读全文

posted @ 2020-04-25 23:45 silyvin 阅读(217) 评论(0) 推荐(0) 编辑

1 2 3 下一页
< 2025年3月 >
23 24 25 26 27 28 1
2 3 4 5 6 7 8
9 10 11 12 13 14 15
16 17 18 19 20 21 22
23 24 25 26 27 28 29
30 31 1 2 3 4 5

统计

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