`

Java:synchronized修饰符在静态方法与非静态方法上的区别

 
阅读更多
synchronized在静态方法上表示调用前要获得类的锁,而在非静态方法上表示调用此方法前要获得对象的锁。
public class StaticSynDemo {

private static String a="test";

//等同于方法print2
public synchronized void print1(String b){ //调用前要取得StaticSynDemo实例化后对象的锁
   System.out.println(b+a);
}
public void print2(String b){
   synchronized (this) {//取得StaticSynDemo实例化后对象的锁
    System.out.println(b+a);
   }
}
//等同于方法print4
public synchronized static void print3(String b){//调用前要取得StaticSynDemo.class类的锁
   System.out.println(b+a);
}
public static void print4(String b){
   synchronized (StaticSynDemo.class) { //取得StaticSynDemo.class类的锁
    System.out.println(b+a);
   }
}

}
分享到:
评论
1 楼 invincibleLiu 2011-12-22  
好帖,要顶!(别投我隐藏啊,这是对BBS最原始一种支持)

相关推荐

    Java修饰符demo

    本文将深入探讨Java修饰符的基础知识,包括访问修饰符、非访问修饰符以及它们在实际编程中的应用。 首先,我们来看访问修饰符。在Java中,有四种主要的访问修饰符: 1. **public**:公共访问修饰符,允许任何地方...

    深入浅出谈java修饰符共6页.pdf.zip

    在Java中,修饰符分为访问修饰符、非访问修饰符和特殊修饰符三类。以下是对这些修饰符的详细解释: 1. 访问修饰符: - `public`: 公有的,可以被任何类访问。当一个类或方法被声明为`public`时,它可以在程序的...

    Java修饰符总结

    本文旨在全面剖析Java中的修饰符,包括它们的特点、用法以及如何在不同场景下正确应用,帮助开发者更深入地理解Java的核心特性。 #### 修饰符分类 Java修饰符主要分为两大类:访问控制符和非访问控制符。其中,...

    java修饰符

    Java还支持非访问控制修饰符,如`static`、`final`、`abstract`、`volatile`和`synchronized`等,它们不直接影响成员的可见性,而是用于控制成员的行为特性,如静态绑定、不可变性、抽象化、线程同步等。 ##### ...

    详解Java修饰符

    在Java中,修饰符分为两类:访问修饰符和非访问修饰符。 访问修饰符控制类、变量、方法和构造函数的可访问性。Java提供了四种不同的访问级别: 1. 默认访问级别(default):当不使用任何修饰符时,这是默认的访问...

    Java 修饰符的分类及方法使用.docx

    在Java中,修饰符分为两类:访问修饰符和非访问修饰符。这里我们将详细介绍这两种类型,并着重讲解访问修饰符的使用。 1. 访问修饰符: - **default**(默认):在类、接口、变量和方法的定义中没有指定任何访问...

    Java 基础之修饰符关键词整理

    4. synchronized:同步修饰符,用于方法或代码块,确保在多线程环境中,同一时间只有一个线程能执行该代码,从而保证线程安全。 5. volatile:挥发性修饰符,用于标记变量,保证在多线程环境下,对变量的修改对其他...

    Java入门——Java修饰词总结

    静态`synchronized`方法会锁定整个类,而非静态方法则锁定调用它的对象。 10. **volatile**: - 使用对象:字段 - 介绍:`volatile`修饰符用于标记可能被多线程访问和修改的字段。它确保了线程间的可见性和有序性...

    JAVA修饰符总结.pdf

    在Java中,为了更好地控制类、方法、变量等成员的访问权限以及行为特征,引入了多种修饰符。本文将详细介绍Java中的各种修饰符及其应用场景。 #### 二、类修饰符 类修饰符主要用于控制类的访问权限和行为特征。 -...

    Java软件开发实战 Java基础与案例开发详解 6-5 static修饰符 共13页.pdf

    ### Java软件开发实战:Java基础与案例开发详解之Static修饰符 #### 6.5 Static修饰符 在Java中,`static`关键字用于声明与类而不是与实例相关的变量、方法或代码块。这一特性使得静态成员能够被类本身直接访问,...

    【IT十八掌徐培成】Java基础第05天-03.抽象类-抽象方法-修饰符组合.zip

    3. 抽象方法可以是静态的,但这样的方法不能在非抽象类中定义,因为静态方法属于类而不属于实例,这与抽象方法的定义相矛盾。 4. 抽象类可以是public、protected或默认,但不能是private,因为private类在任何地方...

    Java:Java 的基础语法

    变量是存储数据的容器,Java有多种类型的变量,包括局部变量(在方法内部定义)、类变量(静态变量,属于类而非特定对象)和成员变量(非静态变量,属于对象)。数组是Java中存储一组相同类型数据的结构,可以通过...

    java修饰词

    对于非静态方法,同步锁是对象实例。 10. **volatile**: - `volatile`修饰的字段在多线程环境中能保证可见性和有序性,但不保证原子性。 - 当多个线程访问同一volatile字段时,无需使用synchronized,但仍需注意...

    Java基础学习,对Java基本内容的一个总结

    * 局部变量:在方法、构造方法或语句中定义的变量,变量的声明和初始化都是在方法中,方法结束后,变量会自动注销。 * 类变量:类变量也声明在类中,方法体之外,但是必须声明为 static 类型。 * 成员变量:成员变量...

    Java基础关键字介绍.docx

    - **static**:静态修饰符,用于声明静态变量和静态方法。 - **synchronized**:同步修饰符,用于确保同一时间只有一个线程可以访问某个代码块。 - **volatile**:易变修饰符,用于多线程环境下的数据同步。 - **...

    Java计算机核心编程笔记

    - `synchronized`:同步修饰符,用于实现线程同步。 - `volatile`:易变修饰符,用于指示编译器不要对变量进行优化。 - `native`:本地修饰符,用于声明本地方法。 #### 五、动作 - `package`:声明包名。 - `...

    java关键字大全及解释

    36. `static`: 修饰符,用于声明静态成员,属于类而非实例。 37. `super`: 引用父类的实例,主要用于子类重写父类方法时调用父类的实现。 38. `switch`: 控制流语句,根据表达式的值执行不同的代码块。 39. `...

    【后端】java基础(5.4)java高级基础之java的修饰符——非访问控制符

    java中的非访问修饰符的作用各不一样,据我所知常用的有六种: static final abstract synchronized volatile transient 今天我们只讲前三种,后面三种等我们讲到线程的时候再回过头来讲。 首先还是通过一张经典的表...

Global site tag (gtag.js) - Google Analytics