![](https://img-blog.csdnimg.cn/20201014180756926.png?x-oss-process=image/resize,m_fixed,h_64,w_64)
java并发编程
源码了解:hadluo
这个作者很懒,什么都没留下…
展开
-
偏向锁、轻量级锁和重量级锁 最易懂解释
重量级锁1.每个对象都有一个对象头,对象头里有一个Mark Word结构,里面存储了锁相关信息(锁类型,偏向线程id等)。2.Mark Word中有一个指针指向monitor,当线程试图获取对象锁时(进入synchronized)自动生成,处于锁定状态。3.monitor由ObjectMonitor c++类实现,里面有: _owner(哪个线程持有锁),_count(线程持有锁的次数),_WaitSet(waiting状态的线程) 等字段。4.当线程1,2依次进入synchronized代码块时原创 2020-06-24 12:24:45 · 467 阅读 · 0 评论 -
java线程堆栈 详解
比如有如下堆栈实例:"resin-22129" daemon prio=10 tid=0x00007fbe5c34e000 nid=0x4cb1 waiting on condition [0x00007fbe4ff7c000] java.lang.Thread.State: WAITING (parking) at sun.misc.Unsafe.park(Native Method) at java.util.concurrent.locks.LockSupport.park(L原创 2020-06-23 22:47:22 · 1428 阅读 · 0 评论 -
线上问题HashMap死循环
线程问题HashMap死循环:https://crossoverjie.top/2018/11/08/java-senior/JVM-concurrent-HashSet-problem/转载 2020-03-17 16:19:51 · 119 阅读 · 0 评论 -
jstack 分析cpu过高的场景
1.场景一: HashMap并发导致死循环public class Test { public static class HashMapThread extends Thread { private static AtomicInteger ai = new AtomicInteger(0); private static Map<Integer, ...原创 2020-03-05 15:22:18 · 269 阅读 · 0 评论 -
高并发-JVM优化-设置JVM参数
下面是我们生产环境的JVM启动参数:-Djava.awt.headless=true -Djava.net.preferIPv4Stack=true -Dcache_enable=true -Xmx4g -Xms2g -Xmn256m -XX:PermSize=128m -Xss256k -XX:+DisableExplicitGC -XX:+UseConcMarkSweepG...原创 2020-03-04 11:08:18 · 1355 阅读 · 0 评论 -
TransmittableThreadLocal 详解
1.先看一个父线程开启子线程,ThreadLocal获取不到父线程的值的问题。public class Test { public static void main(String[] args) { ExecutorService service = Executors.newSingleThreadExecutor(); final ThreadLoca...原创 2020-03-04 11:05:38 · 831 阅读 · 0 评论 -
单例模式的线程不安全问题
1.单例模式懒汉模式 :线程不安全,多线程下可能new多个Test类。public class Test { private Test() { } private static Test instance = null; public static Test getInstance() { if (instance == null) { ...原创 2020-03-02 17:19:59 · 997 阅读 · 0 评论 -
java停止线程
1.java提供了3种方式停止正在运行的线程使用退出标志,也就是当run完成后线程终止。使用stop暴力终止线程(不推荐)。使用interrupt方法中断线程。2.interrupt()介绍 调用interrupt(),只是在当前线程打了一个停止标记,并不是真的停止线程。 在线程中需要用isInterrupted() 判断标记,从而正常退出。public class Test{原创 2017-12-25 17:55:06 · 247 阅读 · 0 评论 -
过期的suspend()挂起、resume()继续执行线程
suspend : 暂停线程 resume : 恢复 suspend 暂停的线程但这两个 API 是过期的,也就是不建议使用的。不推荐使用 suspend() 去挂起线程的原因,是因为 suspend() 在导致线程暂停的同时,并不会去释放任何锁资源。其他线程都无法访问被它占用的锁。直到对应的线程执行 resume() 方法后,被挂起的线程才能继续,从而其它被阻塞在这个锁的线程才可以继续执行。p原创 2017-12-25 18:22:06 · 456 阅读 · 0 评论