• JAVA 1.6锁状态转换



    JVM 学不好 并发就学不好

    面试问题
    Object 有哪些方法
    syn实现过程

    wait notify 为什么要设计到Object上而不是接口?虽然可以 但是面向对象的思想 子类
    object.wait thread.sleep 的区别?

    wait释放锁 挂起

    32位锁状态()
    JDK1.6对锁优化 锁的状态从 无锁->偏向锁->轻量级锁->重量级锁(把所有等待线程放入)
    JDK1.6之前 synchon 性能不高 ,之后优化 建议使用synchon
    分段锁 curruntlok 用的就是syn
    JVM源码



    内核态到核心态 切换 耗费性能
    轻量级锁 拿不到锁就阻塞式不合理的 所以用自适应的自旋锁 但是存在激烈的竞争 自旋次数多会浪费cpu,以短暂cpu负载 换取线程笨重的切换 多次自旋,浪费cpu 导致锁的膨胀 -> 重量级锁


    多线程进入 能否抢到锁 抢不到进入队列
    重量级锁 :Entry List 同步等待锁的队列

    synchoronized是JVM的内置锁,而lock是Java代码实现的。lock是sync对的扩展,完全可以替代后者。lock可以重入,允许同一个线程连续多次获得同一把锁。其次,lock独有的功能有:

    1、可以响应中断,sync要么获得锁执行,要么保持等待。而重入锁可以响应中断,使得线程在迟迟得不到锁的情况下,不用再等待。主要由lockInterruptibly()实现,这是一个可以对中断进行响应的锁申请动作,锁中断可以避免死锁。

    2、锁的申请可以有等待时限,用tryLock()可以实现限时等待,如果超时还未获得锁会返回false,也防止线程迟迟得不到锁时一直等待,可以避免死锁。

    3、公平锁,即锁的获得按照线程先来后到的顺序依次获得,不会产生饥饿现象。sync的锁默认不公平,可通过传入构造方法的参数实现公平锁。

    4、重入锁可以绑定多个Condition条件,这些Condition通过调用await/singal实现线程间通信。





    4.




    4

  • 相关阅读:
    398. Random Pick Index
    739. Daily Temperatures
    779. K-th Symbol in Grammar
    698. Partition to K Equal Sum Subsets
    783. Minimum Distance Between BST Nodes
    asp.netcore 深入了解配置文件加载过程
    啥叫K8s?啥是k8s?
    Asp.NetCore轻松学-实现一个轻量级高可复用的RabbitMQ客户端
    Asp.Net Core 轻松学-一行代码搞定文件上传
    目录---Asp.NETCore轻松学系列【目录】
  • 原文地址:https://www.cnblogs.com/huangzedong/p/12041026.html
Copyright © 2020-2023  润新知