`
lvmlvy
  • 浏览: 44573 次
社区版块
存档分类
最新评论

单例对象公有方法的并发调用

    博客分类:
  • java
阅读更多

首先,我们要清楚java中的内存情况,大略如下,这个大家一般都知道:

1:heap,堆内存,用来存放新创建的类对象,其实就是存储对象的成员变量值、变量类型、对象类型标记;

2:stack,栈内存,用来存储局部变量、对对象的引用等;

3:data segment,数据区,在这个区主要存放的是静态常量,和字符串常量。在类一开始被加载的时候此常量就被初始化放在这个区内,而且被全局所共享,所有的访问直接指向他即可。

4:code segment,代码区,它是存放代码的区,所有的执行代码(其实就是函数)都放在此区内。通过对象的调用指向此区。

 

现假设两个线程正企图同时访问一个单例对象的方法,如

int method1(int i) {    
    int j = 3;     
    return i+j;    
} 

 一个规范的虚拟机线程在调用method1()的时候是这样做的: 

    1) 把method1()的局部变量,包括参数,压入当前线程的栈; 
    2) 从当前线程栈弹出变量j,并赋予数值3; 
    3) 从当前线程栈弹出参数i,与j执行加法运算; 
    4) 从当前线程栈中释放当前方法占用的栈帧,并把method1()的结果压入当前线程栈。 
需要说明的是,当前线程栈是当前线程独有的,绝对不会被其它线程访问到。

分享到:
评论

相关推荐

    JAVA多线程并发下的单例模式应用

    3.公有的、静态的、访问该实例对象的方法 单例模式分为懒汉形和饿汉式 懒汉式: 应用刚启动的时候,并不创建实例,当外部调用该类的实例或者该类实例方法的时候,才创建该类的实例。(时间换空间) 优点:实例在被...

    第九节 单例模式.docx

    需要注意的是,虽然单例模式提供了许多便利,但也存在一些潜在问题,比如难以进行单元测试、破坏了类的封装性(因为必须有公有的获取实例的方法),以及在某些情况下可能导致设计过于僵硬。因此,在实际开发中,应...

    JAVA23中设计模式精讲

    - 饿汉式单例在类加载时即创建实例,确保任何时候调用getInstance()方法都能立即返回实例,具有线程安全性,但可能导致不必要的资源消耗,因为即使未使用,也会提前创建对象。 ```java public class Singleton { ...

    Java单例模式的讲解

    单例模式的两个关键要素是私有构造方法和公有的静态同步(`synchronized`)`getInstance()`方法。私有构造方法防止外部直接创建实例,而`getInstance()`方法则作为获取单例的唯一入口。然而,`synchronized`关键字...

    java保证对象在内存中唯一性的实现方法

    懒汉式单例在首次调用`getInstance()`方法时才进行实例化,实现了延迟加载。但是,未加同步控制的懒汉式单例在多线程环境下不安全,可能导致创建多个实例。加同步控制的懒汉式单例如下: ```java public class ...

    2024java面试题.pdf

    - **wait**:是 Object 类的方法,使当前线程等待,直到其他线程调用此对象的 notify() 或 notifyAll() 方法,会释放锁。 2. **线程局部变量(ThreadLocal)的介绍:** - **ThreadLocal** 是 Java 提供的一种线程...

    Java经典问题答案(带书签).pdf

    - 子类构造方法可以通过`super()`显式调用父类构造方法。 - 如果没有显式调用,则默认调用无参构造方法。 **Java接口与C++虚类的区别** - Java中接口仅包含抽象方法,不提供具体实现。 - C++中虚类可以包含虚函数...

    java笔试题经典集锦

    14. **反射**:在运行时动态获取类的信息并操作类的对象,如创建对象、调用方法、修改属性等。 15. **设计模式**:常见的设计模式,如工厂模式、单例模式、建造者模式、观察者模式、装饰器模式等,及其在实际开发中...

    IT软件开发常用词汇大全.docx

    18. **设计模式(Design Patterns)**:在软件设计中,经过验证的解决常见问题的方法,如单例模式(Singleton)、工厂模式(Factory)和观察者模式(Observer)。 19. **编程范式( Paradigm)**:如面向过程、面向...

    黑马程序员入学Java知识

    - 通常用于调用对象的方法而不关心对象本身。 6. **this关键字** - 指当前对象的引用。 - 用于区分同名的局部变量和成员变量。 7. **面向对象之封装** - 封装是隐藏对象的具体实现细节。 - 通过公有方法对外...

    Java经典面试题+答案(带书签)pdf

    - **Finalize**:对象被垃圾回收前调用的方法,用于清理资源。 **3. Java异常处理机制总结** - 异常处理机制主要包括`try`、`catch`、`finally`等关键字。 - 可以通过`throw`抛出异常,通过`throws`声明异常。 **...

    java面试题经典

    - **公有静态方法**:提供获取单例对象的方式,确保每次调用都能返回相同的实例。 #### MVC设计模式解析 - **模型(Model)**:负责管理应用程序的数据逻辑,处理业务规则和数据的存储。 - **视图(View)**:负责...

    JAVAEE常见面试汇总.docx

    - 公有的静态方法,提供获取实例的方式。 - **实现方式** - **懒汉式**:延迟实例化,第一次调用时创建实例。 - **线程安全懒汉式**:使用同步机制确保多线程环境下的安全性。 - **饿汉式**:在类加载时就已经...

    C++编程资料

    由于提供的文件信息中没有包含具体的学习资料,只是一些重复的网址和对于C++编程全方法学习资料的描述,因此,我无法提供具体知识点的详细解读。不过,我可以基于C++编程语言本身,为您构建出一份C++编程方法的学习...

    SimpleJava.pdf

    - **Comparable接口**:定义了对象自身可以参与自然排序的方法。 - **Comparator接口**:提供了外部比较器,允许按任意标准对对象进行排序。 - **使用场景**:根据实际需求选择合适的排序策略。 #### 13. Java中的...

    JAVA三十个注意

    检查`finalize()`方法是否必要,因为垃圾回收器的调用时机不确定。 #### 12. 减少依赖 过多的类间依赖会增加系统的复杂度和耦合性。合理设计模块,减少不必要的依赖关系,可以使系统更加灵活和易于扩展。 #### 13...

    C AND C++_NORMAL_嵌入式-常用知识&面试题库_大厂面试真题_嵌入式-常用知识&面试题库_大厂面试真题.rar

    - 函数:函数定义、调用、参数传递、递归等。 - 指针:指针的概念、指针变量的声明、指针运算和指针作为函数参数。 - 内存管理:动态内存分配(malloc, free)和栈与堆的区别。 2. **C++基础**: - 对象和类:...

    美团点评2017秋招笔试真题-前端开发工程师B.pdf

    当Activity被其他Activity覆盖或用户离开时,会调用onPause(),然后可能是onStop(),最后销毁时调用onDestroy()。 2. **数据结构与集合**: - **ArrayList和LinkedList**:两者都是Java中的集合类,ArrayList基于...

    写Java程序的三十个基本规则

    - 在类中定义 `finalize()` 方法时,需要调用父类的 `finalize()` 方法。 - `finalize()` 方法主要用于回收资源,在 Java 9 中已被标记为废弃。 - 不推荐依赖 `finalize()` 方法进行资源清理,而应使用其他方式(如 ...

Global site tag (gtag.js) - Google Analytics