摘要:1 异常没有往上抛,也没有打日志 解决: 1 往上抛 2 可以不抛,但要打日志,并break(因为下一个future.get继续会被interruptedException) 2 生产者的get应当放到最后或着不放,所有消费者挂掉,线程显示生产者阻塞,没有消费者,程序一直卡在第一个future,且没
阅读全文
摘要:future task cancel (二)向下传递中断【重要】- java object多大 java对象内存模型 数组有多长(十三)
阅读全文
摘要:1 全局锁,240小时 分段锁8个桶,15小时 单线程1个桶,中程long running 单线程 20个桶7小时 2 能不能乐观锁?这个场景其实应该用乐观锁。IdentityHashMap的可见性没法解决 3 不锁,容忍误差? 与2其实本质相同,乐观锁其实锁了个寂寞
阅读全文
摘要:循环日志 由这篇日志引出的奇怪的问题 原文的目的是尽早回收ThreadMap里的非活跃对象,不要搞的map太大 手段是从外部将所有 各种对象所引用的Threadlocal强制set为null,那么要强刷掉这些对象所在线程的缓存,则threadlocal对象也应该如 内存泄漏事故(二)线程的中断不可信
阅读全文
摘要:0 不允许在循环内打日志 1 主要策略:限制某个循环体内打日志的次数 主要困难:调用链太长,传递循环当前次数要改很多方法,类似于事务的connction,这种不方便传递参数的东西就想到了threadlocal 2 不想永久某线程到100就一直不让打了,想第二天的job清0 同时也不想用timer——
阅读全文
摘要:1 try catch throuable 2 避免主线程阻塞,要另起线程,用future.get超时机制 必要时放弃子线程,确保主线程不被阻塞;但应强制回收子线程的指针:内存泄漏事故(二)线程的中断不可信任【重要】强制回收
阅读全文
摘要:必须new才会加载,=null不会 首先最好先证明加载不了的类确实是在futrue真正run的时候加载的,而不是在定义future的时候,因为题目是future能否感知,如果在主线程定义时加载则不准确 可以看到ExecutionException包裹了NoClassDefFoundError 关于n
阅读全文
摘要:背景: 子线程中,分线程处理然后聚拢 future。get 但是在futureget的异常处理中,并未抛出异常,只是调用Thread.currentThread().interrupt(), 因此主线程要监控这个interrup旗标,从而决定是否抛出异常 1 起先 发现没什么用 2 旗标的生命周期
阅读全文
摘要:1 Map<k, list> not good: map.remove(k) 如果这时有其他指针指向list,则list无法释放 good: map.get(k).clear() map.remove(k) 即使这是有其他指针指向list,导致list无法释放,但是这个list是空的,泄漏的后果不严
阅读全文
摘要:1 测试用例 当future.get响应interruptedexception时,意味着外界想要中断你这个线程和所有子任务 那么应当在interruptedexception响应中对future进行cancel 60 61 行一样结果 应当在38行处中断子任务writeTask 2 实例 1)主线
阅读全文
摘要:0 背景 在 java object多大 java对象内存模型 数组有多长(四)已经访问的对象记录优化 中,用byte数组处理,现在它将暴露在多线程中 借鉴concurrenthashmap的做法 Unsafe控制ConcurrentHashMap内并发数组元素的可见性 1双检分段锁 get if
阅读全文
摘要:https://blog.51cto.com/u_15082395/2590044 深度解析默认 hashCode() 的工作机制 biased object是偏向锁定的结果。这个功能获得了专利,自HotSpot 6开始引入,用来降低对象锁定带来的开销。由于具体实现依赖CPU原子指令(CAS),因此
阅读全文
摘要:1 FutureTask.cancel 干了啥 //有一个入参,需要说明task是否是可中断的 public boolean cancel(boolean mayInterruptIfRunning) { if (state != NEW) return false; if (mayInterrup
阅读全文
摘要:背景:sonar对volatile和synchronized不友好,项目背景:mybatis guice 事务代理切面 private ThreadLocal<Integer> getTrasactionStatus(project_DB_TRANSACTIONAL projectDbTransac
阅读全文
摘要:1 问题的引出 局部变量跨线程,又不能用volatile,怎么保证其可见性 2 是否真的能有局部变量跨线程写入? 看一下这段代码: public static void main(String []f) { Integer integer = 1; new Thread(new InnerThrea
阅读全文
摘要:出自:https://www.cnblogs.com/silyvin/p/9106613.html https://mp.weixin.qq.com/s?__biz=MzIwMzY1OTU1NQ==&mid=2247484057&idx=1&sn=c5fb63c68203001fa3a0545cef
阅读全文
摘要:1 事务里面加锁失效 myorm【重点】 25 2020.7.17 这就要求在事务代理外侧加锁 2 rr级别即使提交也不可见导致死循环 其它相关:jdk与mysql的cas乐观锁
阅读全文
摘要:1 全限定类在同一个类加载器只能加载一次,意味着static对象及代码块只一次,为单例之依据 如果并发发生,则阻塞 故类的加载不存在多线程,因为只执行一次,其他线程等着加载线程,由jvm来保证线程安全性 public class ByLoad { static { try { System.out.
阅读全文
摘要:本质就是利用无限循环run的thread➕BlockingQueue手写阻塞队列 2020.12.6 补充 务必注意线程池的有效shutdown机制,这关系到线程池被有效回收,具体可见:匿名野线程池导致oom 2021.3.9 本例子中,当没有任务时,并没有用BlockingQueue.take阻塞
阅读全文
摘要:结合对象头 https://mp.weixin.qq.com/s/KFgAY3g4tfuaKumVswID4A
阅读全文