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
分享到:
相关推荐
public static synchronized void staticMethod() { // 方法体 } } ``` 在这里,`staticMethod`锁定了`MyClass`类的Class对象,因此任何线程调用`staticMethod`都会互斥。 总结来说,`synchronized`关键字在...
在 Java 中,synchronized 关键字可以作用于 instance 变量、object reference(对象引用)、static 函数和 class literals(类名称字面常量)身上。 Synchronized 关键字的作用是取得对象的锁,而不是把一段代码或...
public static synchronized void method() { // ... } } ``` - **对象锁**:如果`synchronized`修饰非静态方法或者同步语句块中的对象引用是实例引用,那么锁定的是该实例对象。例如: ```java public ...
public static synchronized void method() { // ... } } ``` 在这种情况下,所有线程对`method()`的访问都会互斥,无论它们是否共享同一个对象实例。 除了锁住对象或类,`synchronized`还可以与`wait()`、`...
public static synchronized void method() { // 同步方法体 } ``` - 调用此类的静态同步方法时,所有对象都必须等待当前调用方法的线程完成才能继续。 3. **同步状态变量**:在某些情况下,可能需要对某个...
public static synchronized void staticMethod() { // 方法体 } } ``` ##### 2. 同步代码块 除了同步方法之外,还可以通过`synchronized`关键字来同步一段代码块,这种情况下需要指定同步监视器(锁对象),...
public static synchronized void method() { // ... } } ``` 在这个例子中,`method()`就是一个类锁,多个线程同时调用此方法时,只有一个线程能执行,其他线程必须等待。 **对象锁(Instance Lock)** 对象锁...
public synchronized void method() { // 代码 } ``` 2. 代码块同步:针对特定对象,使用`synchronized`关键字锁定代码块。这允许更细粒度的控制,仅锁定需要同步的部分代码。 ```java Object lock = new Object...
同步方法是通过在方法声明前加上`synchronized`关键字,例如`public synchronized void method() {...}`。同步代码块则是通过`synchronized`关键字包裹一段代码,如`synchronized (object) { ... }`,这里的`object`...
public static synchronized void method() { // 执行代码 } } ``` 在这里,所有对`method`的调用都会互相阻塞,因为它们共享同一个锁——`Thread5.class`。 - **锁的可重入性**:`synchronized`支持可重入锁...
3. 对象锁与类锁的区别:如果同步代码块是基于类的静态方法(`static synchronized`),则锁是针对类的,所有实例共享这个锁。而基于实例方法的同步锁是针对实例对象的。 4. 可重入性:一个线程已经拥有某个对象的...
public synchronized static void method() { // ... } } ``` 或者使用类字面常量作为锁: ```java public class MyClass { public void method() { synchronized (MyClass.class) { // ... } } } ``...
public static synchronized void method() { // 临界区 } ``` 锁定的是当前类的Class对象,即所有的实例共享同一把锁。 `synchronized`的关键作用在于它提供了一个互斥机制,确保同一时间只有一个线程能执行...
public synchronized static void staticMethod() { // ... } ``` - **同步构造函数**:确保在对象创建期间的初始化操作是线程安全的。 ```java public synchronized MyObject() { // ... } ``` - **...
public static synchronized void method1() { // 代码块 } } ``` 这里的`method1`是静态同步方法,所有线程共享一个锁,即`Test.class`,因此在同一时刻,只有一个线程能执行`method1`。 3. 内部类中的同步: ...
public synchronized void method() { // 同步代码块 } ``` 2. **作为代码块**:可以将`synchronized`应用于特定的代码块,以锁定特定的对象。这样只有获取了该对象锁的线程才能进入该代码块。例如: ```java ...
在这个例子中,`testSynchronizedMethod()`是同步方法,这意味着无论主线程还是新启动的线程`t`,在任何时候只能有一个能执行这个方法。所以你会看到输出结果显示主线程和`t`线程交替执行,这是因为每次调用`...
public synchronized void method() { // 需要同步的代码 } ``` 这里,整个方法体被视为同步代码块,锁对象默认为`this`,即当前实例对象。这意味着,如果多个线程试图调用同一个实例的同步方法,它们将按照线程...
public static synchronized void staticMethod() { // ... } } ``` 这里,`staticMethod`是同步的,所有线程在调用时都会等待锁的释放。 在内部类(InnerClass)中,如果需要与外部类的非静态方法同步,可以...
* public synchronized static method() 和 public synchronized method() 的区别 * JDK1.6 中可以代替 synchronized 的方法 2. 阻塞队列的作用和使用 3. task pool 的设计和优化 三、J2EE 相关知识点 1. Spring...