Java中可以对静态方法和实例方法使用synchronized
当在静态方法前面加synchronized 表示锁定class , 当多个线程同时调用静态方法时会阻塞
当在实例方法前面加synchronized 表示锁定class的单个实例 , 当多个线程同时调用class的实例的实例方法时会阻塞
注意:静态方法synchronized 和实例方法synchronized 互不干扰,也就是说当静态方法锁后,不影响实例方法调用,反过来一样
package com.lottery;
public class Test {
public static void main(String[] args) {
final Lock lock = new Lock();
new Thread() {
public void run() {
Lock.method2();
}
}.start();
try {
Thread.sleep(100);
} catch (InterruptedException e) {
e.printStackTrace();
}
new Thread() {
public void run() {
lock.method1();
//Lock.method2();
}
}.start();
}
}
class Lock {
public synchronized void method1() {
System.out.println("method1 start");
try {
Thread.sleep(1000 * 10);
} catch (InterruptedException e) {
e.printStackTrace();
}
System.out.println("method1 end");
}
public static synchronized void method2() {
System.out.println("method2 start");
try {
Thread.sleep(1000 * 10);
} catch (InterruptedException e) {
e.printStackTrace();
}
System.out.println("method2 end");
}
}
分享到:
相关推荐
在编程过程中,我们可能会遇到一些看似诡异的问题,例如“赋值后的静态句柄和实例莫名其妙消失了”。这种情况通常出现在使用面向对象编程(OOP)语言,如Java、C#或Python时,涉及到静态变量和对象生命周期的管理。...
在Java编程语言中,`synchronized`...理解类锁、对象锁和方法锁的用法,以及它们之间的关系,对于编写高效、安全的多线程Java程序至关重要。通过SynchronizedDemo这个示例代码,我们可以进一步学习和实践这些概念。
在描述中提到的“动态”和“静态”的概念,可能是指在实际应用中,互斥锁的创建和管理可以是静态的(在编译时确定)或动态的(在运行时创建)。静态互斥锁在程序启动时即已存在,而动态互斥锁则可以在程序运行过程中...
这意味着所有实例共享同一个锁,不论创建了多少个对象,所有线程在调用静态同步方法时都会争夺这个单一的锁。这样的同步机制适用于需要全局保护的资源或状态。 例如,在`SynchronizedTest.java`中可能会有以下静态...
8. **类锁**:类锁是Java中类级别的锁,通过synchronized修饰类的静态方法或者同步代码块实现,确保同一时间只有一个类实例执行特定的代码。 9. **行级锁**:在数据库管理系统中,行级锁只锁定被操作的数据行,其他...
类锁,也称为静态锁,是针对类级别的锁定,它保护的是类的静态方法或静态代码块。与对象锁不同,类锁锁定的是类的Class对象,这意味着所有实例共享同一把锁。当一个线程进入`synchronized`修饰的静态方法或代码块时...
2. **实例级别锁(Instance-Level Lock)**:当`synchronized`修饰非静态方法或普通代码块时,锁住的是当前对象实例。每个对象都有自己的锁,因此不同的实例可以并发执行其同步方法,只有访问相同实例的线程才会进行...
`ZLockFactory`可能是一个工厂类,用于创建和管理这些读写锁实例。它可以提供静态方法来创建、销毁或者获取全局或局部的读写锁,确保正确性和线程安全。 总之,实现Windows下的读写锁涉及到对`CRITICAL_SECTION`的...
对于静态分配的互斥量, 可以把它设置为PTHREAD_MUTEX_INITIALIZER, 或者调用pthread_mutex_init. 对于动态分配的互斥量, 在申请内存(malloc)之后, 通过pthread_mutex_init进行初始化, 并且在释放内存(free)前需要...
3. **公有的静态获取实例的方法**:提供一个静态的公共方法,如`getInstance()`,用于返回Singleton类的唯一实例。首次调用时,它会创建实例;后续调用则返回第一次创建的实例。 下面是一个简单的C++ Singleton模式...
在单实例编程中,我们创建一个全局或静态的互斥量,并在程序启动时尝试获取这个互斥量的控制权。如果能成功获取,说明当前是第一个实例,程序继续运行;如果无法获取,则表示已有其他实例在运行,新实例将不再继续...
4. **方法和函数**:通过实例,学习如何定义和调用方法,理解参数传递,以及了解静态和非静态方法的区别。 5. **异常处理**:C#中的try-catch语句用于捕获和处理运行时错误。实例会演示如何正确地使用异常处理来...
`synchronized`是Java中一种最基本的锁机制,它可以修饰实例方法、静态方法或者代码块。通过`synchronized`关键字,Java虚拟机能够实现对特定资源的独占式访问,从而确保在多线程环境下对共享资源的操作是原子性的。...
在编程领域,单例模式是一种常用的软件...在C++中,使用静态对象实例是实现单例的一种常见方式,它通过静态成员变量和适当的访问控制来管理类的实例化。理解并正确使用单例模式对于编写高效、可维护的代码至关重要。
本文将重点介绍进程锁,并通过Python代码实例进行演示。 首先,让我们理解一下线程和进程的基本概念。线程是程序执行的最小单元,它们共享同一进程的内存空间,因此线程间的通信较为高效,但同时也带来了数据竞争的...
本实例大全将全面解析`synchronized`的使用方式,包括同步方法、同步语句块、类锁和对象锁。 ### 1. 同步方法 同步方法是通过在方法声明前加上`synchronized`关键字实现的。这样,同一时间只有一个线程可以执行该...
- 修饰静态方法:整个类的这个静态方法同步,所有类的实例共享一个锁。 - 代码块:指定对象锁,只对代码块进行同步,更细粒度的控制。 2. ReentrantLock(可重入锁): - Lock接口的实现,提供了比synchronized...
例如,可以使用类级别的对象(静态成员)作为锁,使得多个实例可以同时访问,但不同实例间的某些操作仍然是互斥的。 使用同步代码块的一个重要原因是提高效率。如果整个方法都需要同步,而实际上只有部分代码需要...
在Java中,锁的机制主要可以分为乐观锁和悲观锁两大类,此外还包括自旋锁、Synchronized同步锁和可重入锁等,下面将详细介绍这些核心知识点。 乐观锁是一种基于“我认为数据不会经常发生冲突”的假设而设计的锁策略...
接着,我们可以创建一个静态的ReadWriterLockSlim实例,确保在整个应用程序中只有一个读写锁对象,以避免不同锁之间的竞争条件。 以下是使用读写锁的示例代码: ```csharp using System; using System.IO; using ...