• 12、JAVA内存模型与线程


     一、JMM

    有序性,可见性,原子性

    synchorize :3个性都有;

    volatile:保证可见性+禁止指令重排;

    二、线程的五种状态

    面向过程与面向对象的差别

    面向过程:站在计算机的角度分析和解决问题,把问题分解成数据+程序两个独立的单元;

    面向对象:站在现实的角度分析和解决问题,把数据+程序都看成是对象的一部分;

    三、线程安全

    synchornize:编辑后会有两条指令,monitorenter和monitorexit;分别对应操作系统对内存区域的lock和unlock;

    reentrantlocak:

      1、等待可中断;

      2、可实现公平锁; 获取锁的顺序按照”先来后到“原则,默认情况下是非公平的,synchornize也是非公平的;

      3、锁可以绑定多个条件;

      

    current包的CAS操作是基于硬件的指令操作系统原子操作Compare-And-Swap;

    自旋:忙循环,防止线程挂起;使用指令开启

    锁消除:如果同步块内的数据被编辑器判断为没有溢出,则编辑器会把锁代码消除掉;

    锁粗化:为了避免频繁得加锁,会自己优化为一个大的锁包围;

    轻量级锁:

    偏向锁:

  • 相关阅读:
    execvp
    Linux系统调用getrlimit()与setrlimit()函数详解
    Va_start及Vsprintf应用
    waitpid()
    sdut 2408 Pick apples 夜
    poj 1273 Drainage Ditches 夜
    poj 1408 Fishnet 夜
    poj 1113 Wall 夜
    poj 1584 A Round Peg in a Ground Hole 夜
    poj 3007 Organize Your Train part II 夜
  • 原文地址:https://www.cnblogs.com/yeyongjian/p/9254590.html
Copyright © 2020-2023  润新知