书籍推荐

  • Concurrent Programming in Java(by Doug Lea),Doug Lea 是 J.U.C 包的作者

    JOL(Java Object Layout)对象布局工具

    JOL 普通 Java 对象的内部布局工具
    maven 地址:https://mvnrepository.com/artifact/org.openjdk.jol/jol-core
    使用说明:JOL分析对象的内存布局

    Jcstress

    Jcstress 全称 Java Concurrency Stress,是一种并发压力测试工具,可以帮助研究JVM、Java类库和硬件中并发的正确性。
    Github : https://github.com/openjdk/jcstress
    Wiki : https://openjdk.java.net/projects/code-tools/jcstress/

    Jconsole远程连接设置(需要亲自验证)

    运行JAR包

    1. java -jar -Djava.rmi.server.hostname='IP' -Dcom.sun.management.jmxremote.port='PORT' -Dcom.sun.management.jmxremote -Dcom.sun.management.jmxremote.authenticate=是否认证信任凭证 -Dcom.sun.management.jmxremote.ssl=是否启用SSL JAR

    修改 /etc/hosts 文件,将 127.0.0.1 映射到主机名
    如果要认真访问,还需要处理:

  • 复制 jmxremote.password 文件;

  • 修改 jmxremote.password 和 jmxremoate.access 文件的权限为 600 即文件所有者可读写;
  • 连接时填入用户名和口令

    活跃性

    死锁

    一组相互竞争资源的线程因相互等待,导致永久阻塞的现象
    发生死锁的条件
  1. 互斥:共享资源同时只能有一个线程占用
  2. 占有且等待:线程A以及取得共享资源X,在等待共享资源Y,不释放共享资源X
  3. 不可抢占:其他线程不能抢占线程A已经持有的资源
  4. 循环等待:线程A等待线程B占有的资源,线程B等待线程A占有的资源

    饥饿

    线程不能正常的访问共享资源,并且无法执行下去的情况
    解决线程饥饿

  5. 保证资源充足

  6. 线程的优先级一致,能够公平分配资源
  7. 避免查时间占用锁的线程执行

    活锁

    线程之间相互谦让,导致线程无法执行下去
    解决方案

  8. 随机给线程一个等待时间