`
liugang594
  • 浏览: 978738 次
  • 性别: Icon_minigender_1
  • 来自: 北京
社区版块
存档分类
最新评论

synchronized所关联的对象

阅读更多

每一个synchronized(同步)都需要与某个对象实例相关联。例如:

 

synchronized(obj){

        //do something

}

 

那么当我们对方法使用synchronized关键字时,关联的对象又是什么呢?

 

1. 实例方法(非静态方法)

   

    所谓的实例方法是指需要通过类对象来调用的方法,例如:

 

   

class A{

     private String name;

     public String getName(){
            return name;
     }


}

 

    要调用A的getName()方法,我们需要有一个A的对象,然后通过该对象调用getName()方法。例如:

 

   

A a = ...;
a.getName();

 

 

    在实例方法上加上synchronized关键字,那么同步对象为调用该方法的对象,例如:

 

   

     public synchronized String getName(){
            return name;
     }

 

   那么相当于:

 

   

A a = ...;
synchronized(a){
    a.getName();
}

 

 

2. 类方法(静态方法)

 

    静态方法是指不需要通过实例法类对象就可调用的方法,例如:

 

   

public static String getName(){

             return "name";
}

 

    如果在方法前加上synchronized声明,则同步对象是该方法所在类的class对象。例如:

 

    

public synchronized static String getName(){

             return "name";
}

 

    调用A.getName,相当于:

 

   

synchronized(A.class){
       A.getName();
}

    

分享到:
评论

相关推荐

    Java synchronized详细解读.docx

    由于同一进程的多个线程共享同一片存储空间,在带来方便的同时,也带来了访问...每个对象只有一个锁(lock)与之相关联。 实现同步是要很大的系统开销作为代价的,甚至可能造成死锁,所以尽量避免无谓的同步控制。

    Java synchronized 详解.docx

    由于同一进程的多个线程共享同一片存储空间,在带来方便的同时,也带来了访问...每个对象只有一个锁(lock)与之相关联。 实现同步是要很大的系统开销作为代价的,甚至可能造成死锁,所以尽量避免无谓的同步控制。

    该仓库为Java进阶部分课堂同步代码.rar

    执行monitorenter指令时,线程会为锁对象关联一个ObjectMonitor对象(c++)。线程遇到synchronized同步时,先会进入ObjectMonitor对象的EntryList队列中,然后尝试把ObjectMonitor对象的owner变量设置为当前线程,同时...

    Java多线程同步Synchronized深入解析

    同步的概念:  同步分为同步方法和同步块两种方式。  锁定的内容分为锁定类的某个特定实例和锁定类对象(类的所有实例) ...每一个对象都只有一个锁与之相关联。  下例中分情况的列举各种情况下的同步效果

    【05-面向对象(下)】

    •一个类实现了一个或多个接口之后,这个类必须完全实现这些接口里所定义的全部抽象方法(也就是重写这些抽 象方法); •否则,该类将保留从父接口那里继承到的抽象方法,该类也必须定义成抽象类。 接口...

    超级有影响力霸气的Java面试题大全文档

    当客户机第一次调用一个Stateful Session Bean 时,容器必须立即在服务器中创建一个新的Bean实例,并关联到客户机上,以后此客户机调用Stateful Session Bean 的方法时容器会把调用分派到与此客户机相关联的Bean实例...

    java7hashmap源码-ThreadLearning:多线程的学习

    每个Java对象都可以关联一个Monitor对象,如果使用synchronized给对象上锁(重量级)之后,该对象头的Mark Word中就被设置指向Monitor对象的指针 Monitor是JVM实现的对象,当使用synchronized(obj)对一个对象进行...

    HotspotOverview.pdf

     >避免关联一个系统互斥信号量或者每个对象的条件变量(heavy-weight lock)  >当没有竞争时,使用原子变量进入或者退出monitor  >当有竞争时,退回到heavy-weight的OS锁 *高效,因为大多数锁都是没有竞争的 ...

    HashMap的特点与使用方法详解.docx

    多线程环境下,建议使用 ConcurrentHashMap,或者使用 Collections.synchronizedMap(hashMap) 将 HashMap 转成线程同步的。 只能使用关联的键来获取值。 HashMap 只能存储对象,所以基本数据类型应该使用其包装器...

    java 面试题 总结

    wait是Object类的方法,对此对象调用wait方法导致本线程放弃对象锁,进入等待此对象的等待锁定池,只有针对此对象发出notify方法(或notifyAll)后本线程才进入对象锁定池准备获得对象锁进入运行状态。 14、Overload...

    java多线程设计模式详解(PDF及源码)

    目录 漫谈UML UML 类图 类和层次结构的关系 接口与实现 聚合 访问控制 类间的关联性 顺序图 处理流程和对象间的协调 时序图 Introduction 1 Java语言的线程 Java语言的线程 何谓线程 明为追踪处理流程,实则追踪...

    最新Java面试宝典pdf版

    52、当一个线程进入一个对象的一个synchronized方法后,其它线程是否可进入此对象的其它方法? 33 53、线程的基本概念、线程的基本状态以及状态之间的关系 34 54、简述synchronized和java.util.concurrent.locks.Lock...

    Java面试笔试资料大全

    52、当一个线程进入一个对象的一个synchronized方法后,其它线程是否可进入此对象的其它方法? 33 53、线程的基本概念、线程的基本状态以及状态之间的关系 34 54、简述synchronized和java.util.concurrent.locks.Lock...

    Java面试宝典2010版

    52、当一个线程进入一个对象的一个synchronized方法后,其它线程是否可进入此对象的其它方法? 53、线程的基本概念、线程的基本状态以及状态之间的关系 54、简述synchronized和java.util.concurrent.locks.Lock的...

    Java面试宝典-经典

    52、当一个线程进入一个对象的一个synchronized方法后,其它线程是否可进入此对象的其它方法? 33 53、线程的基本概念、线程的基本状态以及状态之间的关系 34 54、简述synchronized和java.util.concurrent.locks.Lock...

    JAVA面试宝典2010

    52、当一个线程进入一个对象的一个synchronized方法后,其它线程是否可进入此对象的其它方法? 33 53、线程的基本概念、线程的基本状态以及状态之间的关系 34 54、简述synchronized和java.util.concurrent.locks.Lock...

    java面试题大全(2012版)

    52、当一个线程进入一个对象的一个synchronized方法后,其它线程是否可进入此对象的其它方法? 33 53、线程的基本概念、线程的基本状态以及状态之间的关系 34 54、简述synchronized和java.util.concurrent.locks.Lock...

    Java面试宝典2012版

    52、当一个线程进入一个对象的一个synchronized方法后,其它线程是否可进入此对象的其它方法? 33 53、线程的基本概念、线程的基本状态以及状态之间的关系 34 54、简述synchronized和java.util.concurrent.locks....

    java面试宝典2012

    52、当一个线程进入一个对象的一个synchronized方法后,其它线程是否可进入此对象的其它方法? 37 53、线程的基本概念、线程的基本状态以及状态之间的关系 37 54、简述synchronized和java.util.concurrent.locks.Lock...

Global site tag (gtag.js) - Google Analytics