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);
}
}
- 浏览: 33468 次
最新评论
-
dmwdmc:
...
Java 模拟鼠标操作实现 Html5 Drag And Drop -
TopLongMan:
...
WebLogic、WebSphere、JBOSS、Tomcat 之间的区别 -
dmwdmc:
7,8年前的东西,到这里看了2分钟全回忆起
JAVA Socket编程 -
dmwdmc:
受教了
cookie 和session 的区别
相关推荐
本文将深入探讨Java修饰符的基础知识,包括访问修饰符、非访问修饰符以及它们在实际编程中的应用。 首先,我们来看访问修饰符。在Java中,有四种主要的访问修饰符: 1. **public**:公共访问修饰符,允许任何地方...
在Java中,修饰符分为访问修饰符、非访问修饰符和特殊修饰符三类。以下是对这些修饰符的详细解释: 1. 访问修饰符: - `public`: 公有的,可以被任何类访问。当一个类或方法被声明为`public`时,它可以在程序的...
本文旨在全面剖析Java中的修饰符,包括它们的特点、用法以及如何在不同场景下正确应用,帮助开发者更深入地理解Java的核心特性。 #### 修饰符分类 Java修饰符主要分为两大类:访问控制符和非访问控制符。其中,...
Java还支持非访问控制修饰符,如`static`、`final`、`abstract`、`volatile`和`synchronized`等,它们不直接影响成员的可见性,而是用于控制成员的行为特性,如静态绑定、不可变性、抽象化、线程同步等。 ##### ...
在Java中,修饰符分为两类:访问修饰符和非访问修饰符。 访问修饰符控制类、变量、方法和构造函数的可访问性。Java提供了四种不同的访问级别: 1. 默认访问级别(default):当不使用任何修饰符时,这是默认的访问...
在Java中,修饰符分为两类:访问修饰符和非访问修饰符。这里我们将详细介绍这两种类型,并着重讲解访问修饰符的使用。 1. 访问修饰符: - **default**(默认):在类、接口、变量和方法的定义中没有指定任何访问...
4. synchronized:同步修饰符,用于方法或代码块,确保在多线程环境中,同一时间只有一个线程能执行该代码,从而保证线程安全。 5. volatile:挥发性修饰符,用于标记变量,保证在多线程环境下,对变量的修改对其他...
静态`synchronized`方法会锁定整个类,而非静态方法则锁定调用它的对象。 10. **volatile**: - 使用对象:字段 - 介绍:`volatile`修饰符用于标记可能被多线程访问和修改的字段。它确保了线程间的可见性和有序性...
在Java中,为了更好地控制类、方法、变量等成员的访问权限以及行为特征,引入了多种修饰符。本文将详细介绍Java中的各种修饰符及其应用场景。 #### 二、类修饰符 类修饰符主要用于控制类的访问权限和行为特征。 -...
### Java软件开发实战:Java基础与案例开发详解之Static修饰符 #### 6.5 Static修饰符 在Java中,`static`关键字用于声明与类而不是与实例相关的变量、方法或代码块。这一特性使得静态成员能够被类本身直接访问,...
3. 抽象方法可以是静态的,但这样的方法不能在非抽象类中定义,因为静态方法属于类而不属于实例,这与抽象方法的定义相矛盾。 4. 抽象类可以是public、protected或默认,但不能是private,因为private类在任何地方...
变量是存储数据的容器,Java有多种类型的变量,包括局部变量(在方法内部定义)、类变量(静态变量,属于类而非特定对象)和成员变量(非静态变量,属于对象)。数组是Java中存储一组相同类型数据的结构,可以通过...
对于非静态方法,同步锁是对象实例。 10. **volatile**: - `volatile`修饰的字段在多线程环境中能保证可见性和有序性,但不保证原子性。 - 当多个线程访问同一volatile字段时,无需使用synchronized,但仍需注意...
* 局部变量:在方法、构造方法或语句中定义的变量,变量的声明和初始化都是在方法中,方法结束后,变量会自动注销。 * 类变量:类变量也声明在类中,方法体之外,但是必须声明为 static 类型。 * 成员变量:成员变量...
- **static**:静态修饰符,用于声明静态变量和静态方法。 - **synchronized**:同步修饰符,用于确保同一时间只有一个线程可以访问某个代码块。 - **volatile**:易变修饰符,用于多线程环境下的数据同步。 - **...
- `synchronized`:同步修饰符,用于实现线程同步。 - `volatile`:易变修饰符,用于指示编译器不要对变量进行优化。 - `native`:本地修饰符,用于声明本地方法。 #### 五、动作 - `package`:声明包名。 - `...
36. `static`: 修饰符,用于声明静态成员,属于类而非实例。 37. `super`: 引用父类的实例,主要用于子类重写父类方法时调用父类的实现。 38. `switch`: 控制流语句,根据表达式的值执行不同的代码块。 39. `...
java中的非访问修饰符的作用各不一样,据我所知常用的有六种: static final abstract synchronized volatile transient 今天我们只讲前三种,后面三种等我们讲到线程的时候再回过头来讲。 首先还是通过一张经典的表...