`
netbean77
  • 浏览: 32922 次
  • 性别: Icon_minigender_1
  • 来自: 上海
社区版块
存档分类
最新评论

synchronized method and synchronized static method

    博客分类:
  • JAVA
 
阅读更多

synchronized method and synchronized static method :

 

key point1:

synchronized void foo() {
    ...
}
is same as
void foo() {
    synchronized(this) {
        ...
    }
}

 

synchronized static void foo() {
    ...
}
is same as

static void foo() {
    synchronized(SomeClass.class) {
        ...
    }
}

key point2:

 

You can use any object as the lock. If you want to lock subsets of method or static methods.

class SomeClass {
    private static final Object LOCK_1 = new Object() {};
    private static final Object LOCK_2 = new Object() {};
    void foo() {
        synchronized(LOCK_1) {...}
    }
    static void fee() {
        synchronized(LOCK_2) {...}
    }
}
refer:http://stackoverflow.com/questions/578904/how-do-synchronized-static-methods-work-in-java

 

 

 

分享到:
评论

相关推荐

    synchronized的几种示例

    public static synchronized void staticMethod() { // 方法体 } } ``` 在这里,`staticMethod`锁定了`MyClass`类的Class对象,因此任何线程调用`staticMethod`都会互斥。 总结来说,`synchronized`关键字在...

    java中synchronized用法

    在 Java 中,synchronized 关键字可以作用于 instance 变量、object reference(对象引用)、static 函数和 class literals(类名称字面常量)身上。 Synchronized 关键字的作用是取得对象的锁,而不是把一段代码或...

    synchronized用法大全实例

    public static synchronized void method() { // ... } } ``` - **对象锁**:如果`synchronized`修饰非静态方法或者同步语句块中的对象引用是实例引用,那么锁定的是该实例对象。例如: ```java public ...

    synchronized并发讲解源码.zip

    public static synchronized void method() { // ... } } ``` 在这种情况下,所有线程对`method()`的访问都会互斥,无论它们是否共享同一个对象实例。 除了锁住对象或类,`synchronized`还可以与`wait()`、`...

    Synchronized关键字的用法

    public static synchronized void method() { // 同步方法体 } ``` - 调用此类的静态同步方法时,所有对象都必须等待当前调用方法的线程完成才能继续。 3. **同步状态变量**:在某些情况下,可能需要对某个...

    JAVA synchronized详解

    public static synchronized void staticMethod() { // 方法体 } } ``` ##### 2. 同步代码块 除了同步方法之外,还可以通过`synchronized`关键字来同步一段代码块,这种情况下需要指定同步监视器(锁对象),...

    synchronized枷锁实例

    public static synchronized void method() { // ... } } ``` 在这个例子中,`method()`就是一个类锁,多个线程同时调用此方法时,只有一个线程能执行,其他线程必须等待。 **对象锁(Instance Lock)** 对象锁...

    synchronized与单例的线程安全

    public synchronized void method() { // 代码 } ``` 2. 代码块同步:针对特定对象,使用`synchronized`关键字锁定代码块。这允许更细粒度的控制,仅锁定需要同步的部分代码。 ```java Object lock = new Object...

    Java synchronized详细解读.docx

    同步方法是通过在方法声明前加上`synchronized`关键字,例如`public synchronized void method() {...}`。同步代码块则是通过`synchronized`关键字包裹一段代码,如`synchronized (object) { ... }`,这里的`object`...

    java_synchronized详解

    public static synchronized void method() { // 执行代码 } } ``` 在这里,所有对`method`的调用都会互相阻塞,因为它们共享同一个锁——`Thread5.class`。 - **锁的可重入性**:`synchronized`支持可重入锁...

    java-synchronized详解.doc

    3. 对象锁与类锁的区别:如果同步代码块是基于类的静态方法(`static synchronized`),则锁是针对类的,所有实例共享这个锁。而基于实例方法的同步锁是针对实例对象的。 4. 可重入性:一个线程已经拥有某个对象的...

    Javasynchronized机制.pdf

    public synchronized static void method() { // ... } } ``` 或者使用类字面常量作为锁: ```java public class MyClass { public void method() { synchronized (MyClass.class) { // ... } } } ``...

    Java并发-Synchronized关键字.docx

    public static synchronized void method() { // 临界区 } ``` 锁定的是当前类的Class对象,即所有的实例共享同一把锁。 `synchronized`的关键作用在于它提供了一个互斥机制,确保同一时间只有一个线程能执行...

    详细解读java同步之synchronized解析

    public synchronized static void staticMethod() { // ... } ``` - **同步构造函数**:确保在对象创建期间的初始化操作是线程安全的。 ```java public synchronized MyObject() { // ... } ``` - **...

    Java中synchronized关键字修饰方法同步的用法详解

    public static synchronized void method1() { // 代码块 } } ``` 这里的`method1`是静态同步方法,所有线程共享一个锁,即`Test.class`,因此在同一时刻,只有一个线程能执行`method1`。 3. 内部类中的同步: ...

    synchronized详解

    public synchronized void method() { // 同步代码块 } ``` 2. **作为代码块**:可以将`synchronized`应用于特定的代码块,以锁定特定的对象。这样只有获取了该对象锁的线程才能进入该代码块。例如: ```java ...

    Java多线程程序中synchronized修饰方法的使用实例

    在这个例子中,`testSynchronizedMethod()`是同步方法,这意味着无论主线程还是新启动的线程`t`,在任何时候只能有一个能执行这个方法。所以你会看到输出结果显示主线程和`t`线程交替执行,这是因为每次调用`...

    并发编程原理学习:synchronized关键字.doc

    public synchronized void method() { // 需要同步的代码 } ``` 这里,整个方法体被视为同步代码块,锁对象默认为`this`,即当前实例对象。这意味着,如果多个线程试图调用同一个实例的同步方法,它们将按照线程...

    java多线程编程之使用Synchronized块同步方法

    public static synchronized void staticMethod() { // ... } } ``` 这里,`staticMethod`是同步的,所有线程在调用时都会等待锁的释放。 在内部类(InnerClass)中,如果需要与外部类的非静态方法同步,可以...

    高级开发人员面试宝典之假如你是面试官.docx

    * public synchronized static method() 和 public synchronized method() 的区别 * JDK1.6 中可以代替 synchronized 的方法 2. 阻塞队列的作用和使用 3. task pool 的设计和优化 三、J2EE 相关知识点 1. Spring...

Global site tag (gtag.js) - Google Analytics