美文网首页
内存模型

内存模型

作者: 司徒伯明 | 来源:发表于2021-08-20 16:38 被阅读0次

1.4 Java的 内存模型

是否线程安全
线程安全与cpu资源的抢夺
多线程在读写共享变量时引发的问题

线程的原子性

多个变量访问同一个变量的时候就会出现''线程安全的问题”。

Sychonize 关键字的使用

线程间等待唤醒机制

1.5 生产者消费者模型

1.6 Locker各种锁

CAS AQS

单列模式与多线程

  • 饿汉式
    懒汉式是指在类初始的已经将对象加载完毕,最简单的实现办法就直接new一个对象,就像一个饥饿的汉子。

    public class Singleton{  
        private Singleton(){};
        private static Singleton single = new Singleton();
        public static Singleton getInstance(){
          return single;
        }      
    };
    
  • 懒汉式

    public class Singleton{     
       private static Singleton singleton;
       private Singleton(){}
       public static Singleton getInstance(){
         if(singleton == null){
          singleton = new Singleton();
         }
        return singleton;}
    }
    

这种饿汉式的写法在单线程环境下,初看起来是没有问题。但是如果在多线程的环境下就回出现错误。
简单直接的解决方案就是给 getInstance 方法加锁。

  • 方法锁

    private static Singleton singleton;
       private Singleton(){}
    
       public synchronized static Singleton getInstance(){
        if(singleton == null){
         singleton = new Singleton();
        }
       return singleton;}
     }
    
  • 代码块加锁

    public class Singleton{
        private static Singleton singleton;
        private Singleton(){}
        public  static Singleton getInstance(){
        synchronized (Singleton.class){
         if(singleton == null){
             singleton = new Singleton();
           }
         }
         return singleton;
       }
    }
    
  • 只针对某些重要步骤加锁

    public class Singleton {
      private static Singleton singleton;
      private Singleton(){}
      public  static Singleton getInstance(){
        if(singleton == null){
           synchronized (Singleton.class){
           singleton = new Singleton();
           }
        }
       return singleton;
       }
     }
    
  • 使用DCL 双检查机制来实现多线程下的延迟加载

    public class Singleton {
      private static Singleton singleton;
      private Singleton(){}
      public  static Singleton getInstance(){
        if(singleton == null){
           synchronized (Singleton.class){
           singleton = new Singleton();
           }
        }
       return singleton;
       }
     }
    
  • 静态内置类来实现单例模式

  • 序列和反序列化实现单例模式

  • static静态快实现单例模式

public class Singleton {
private Singleton(){    
}
private static  Singleton singleton = null;

 static {
     singleton = new Singleton();}
 public Singleton getSingleton(){
    return  singleton;
}}
  • emnu实现单例模式

JVM 层级.


image.png

as-if-serial
不管硬件什么顺序,单线程执行的结果不变,看上去像是 serial

ZGC 的 NUMA Aware
Non Uniform Memory Access,
分配内存会优先分配该线程所在的CPU的最近内存

相关文章

  • Flink JobManager | TaskManager内存

    Flink内存模型分析 JobManager内存模型 TaskManager内存模型 内存模型分析 Flink使用...

  • 图解jvm--(四)内存模型

    内存模型 java 内存模型 很多人将【java 内存结构】与【java 内存模型】傻傻分不清,【java 内存模...

  • JVM内存模型(jvm 入门篇)

    概述 jvm 入门篇,想要学习jvm,必须先得了解JVM内存模型,JVM内存模型,JVM内存模型,JVM内存模型,...

  • java内存模型

    1.内存模型(JMM) 1.1什么是Java内存模型? Java内存模型将内存分为主内存和工作内存两大部分;主内存...

  • [Java多线程编程之八] Java内存模型

    一、Java内存模型 == JVM内存模型?   很多人都会认为Java内存模型就是JVM内存模型,但实际上是错的...

  • 深度解析Java多线程的内存模型

    内部java内存模型 硬件层面的内存模型 Java内存模型和硬件内存模型的联系 共享对象的可见性 资源竞速 Jav...

  • java虚拟机-内存模型与线程

    一、java内存模型 java定义的内存模型是类似物理计算机的三级缓存模型 1.主内存与工作内存 java内存模型...

  • CPU内存模型 和 JAVA内存模型 讲解

    CPU 内存模型 在讲解 JAVA 内存模型之前,先了解 CPU 内存模型,因为JAVA内存模型跟它是十分相似的。...

  • Java基础之内存模型

    Java基础之内存模型 目录 Java内存模型简单介绍 JVM介绍 存储方式 并发原因 Java内存模型与系统内存...

  • (005)java中的内存模型

    概述 在java中应为不同的目的可以将java划分为两种内存模型:gc内存模型。并发内存模型。 gc内存模型 ja...

网友评论

      本文标题:内存模型

      本文链接:https://www.haomeiwen.com/subject/lovtiltx.html