`
benx
  • 浏览: 276898 次
  • 性别: Icon_minigender_1
  • 来自: 北京
社区版块
存档分类
最新评论

静态锁和实例锁

    博客分类:
  • java
 
阅读更多

 

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时,涉及到静态变量和对象生命周期的管理。...

    synchronized枷锁实例

    在Java编程语言中,`synchronized`...理解类锁、对象锁和方法锁的用法,以及它们之间的关系,对于编写高效、安全的多线程Java程序至关重要。通过SynchronizedDemo这个示例代码,我们可以进一步学习和实践这些概念。

    3.线程间同步和通信之互斥锁(静态)

    在描述中提到的“动态”和“静态”的概念,可能是指在实际应用中,互斥锁的创建和管理可以是静态的(在编译时确定)或动态的(在运行时创建)。静态互斥锁在程序启动时即已存在,而动态互斥锁则可以在程序运行过程中...

    静态方法同步 与 非静态方法同步

    这意味着所有实例共享同一个锁,不论创建了多少个对象,所有线程在调用静态同步方法时都会争夺这个单一的锁。这样的同步机制适用于需要全局保护的资源或状态。 例如,在`SynchronizedTest.java`中可能会有以下静态...

    各种锁汇总,乐观锁、悲观锁、分布式锁、可重入锁、互斥锁、读写锁、分段锁、类锁、行级锁等

    8. **类锁**:类锁是Java中类级别的锁,通过synchronized修饰类的静态方法或者同步代码块实现,确保同一时间只有一个类实例执行特定的代码。 9. **行级锁**:在数据库管理系统中,行级锁只锁定被操作的数据行,其他...

    Java对象锁和类锁全面解析(多线程synchronize

    类锁,也称为静态锁,是针对类级别的锁定,它保护的是类的静态方法或静态代码块。与对象锁不同,类锁锁定的是类的Class对象,这意味着所有实例共享同一把锁。当一个线程进入`synchronized`修饰的静态方法或代码块时...

    一个简单的java类,说明了锁的粒度

    2. **实例级别锁(Instance-Level Lock)**:当`synchronized`修饰非静态方法或普通代码块时,锁住的是当前对象实例。每个对象都有自己的锁,因此不同的实例可以并发执行其同步方法,只有访问相同实例的线程才会进行...

    WINDOWS读写锁实现

    `ZLockFactory`可能是一个工厂类,用于创建和管理这些读写锁实例。它可以提供静态方法来创建、销毁或者获取全局或局部的读写锁,确保正确性和线程安全。 总之,实现Windows下的读写锁涉及到对`CRITICAL_SECTION`的...

    Linux C 多线程编程之互斥锁与条件变量实例详解

    对于静态分配的互斥量, 可以把它设置为PTHREAD_MUTEX_INITIALIZER, 或者调用pthread_mutex_init. 对于动态分配的互斥量, 在申请内存(malloc)之后, 通过pthread_mutex_init进行初始化, 并且在释放内存(free)前需要...

    C++ 单一实例

    3. **公有的静态获取实例的方法**:提供一个静态的公共方法,如`getInstance()`,用于返回Singleton类的唯一实例。首次调用时,它会创建实例;后续调用则返回第一次创建的实例。 下面是一个简单的C++ Singleton模式...

    只有一个实例 单实例编程 vc 源码

    在单实例编程中,我们创建一个全局或静态的互斥量,并在程序启动时尝试获取这个互斥量的控制权。如果能成功获取,说明当前是第一个实例,程序继续运行;如果无法获取,则表示已有其他实例在运行,新实例将不再继续...

    C#程序100实例,非常实用

    4. **方法和函数**:通过实例,学习如何定义和调用方法,理解参数传递,以及了解静态和非静态方法的区别。 5. **异常处理**:C#中的try-catch语句用于捕获和处理运行时错误。实例会演示如何正确地使用异常处理来...

    Java的锁机制的学习和使用

    `synchronized`是Java中一种最基本的锁机制,它可以修饰实例方法、静态方法或者代码块。通过`synchronized`关键字,Java虚拟机能够实现对特定资源的独占式访问,从而确保在多线程环境下对共享资源的操作是原子性的。...

    cpp代码-单例模式-静态对象实例

    在编程领域,单例模式是一种常用的软件...在C++中,使用静态对象实例是实现单例的一种常见方式,它通过静态成员变量和适当的访问控制来管理类的实例化。理解并正确使用单例模式对于编写高效、可维护的代码至关重要。

    Python简单进程锁代码实例

    本文将重点介绍进程锁,并通过Python代码实例进行演示。 首先,让我们理解一下线程和进程的基本概念。线程是程序执行的最小单元,它们共享同一进程的内存空间,因此线程间的通信较为高效,但同时也带来了数据竞争的...

    synchronized用法大全实例

    本实例大全将全面解析`synchronized`的使用方式,包括同步方法、同步语句块、类锁和对象锁。 ### 1. 同步方法 同步方法是通过在方法声明前加上`synchronized`关键字实现的。这样,同一时间只有一个线程可以执行该...

    多线程的使用与线程锁的两种实现

    - 修饰静态方法:整个类的这个静态方法同步,所有类的实例共享一个锁。 - 代码块:指定对象锁,只对代码块进行同步,更细粒度的控制。 2. ReentrantLock(可重入锁): - Lock接口的实现,提供了比synchronized...

    java锁机制详解.pdf

    例如,可以使用类级别的对象(静态成员)作为锁,使得多个实例可以同时访问,但不同实例间的某些操作仍然是互斥的。 使用同步代码块的一个重要原因是提高效率。如果整个方法都需要同步,而实际上只有部分代码需要...

    java锁各种核心整理

    在Java中,锁的机制主要可以分为乐观锁和悲观锁两大类,此外还包括自旋锁、Synchronized同步锁和可重入锁等,下面将详细介绍这些核心知识点。 乐观锁是一种基于“我认为数据不会经常发生冲突”的假设而设计的锁策略...

    C#使用读写锁三行代码简单解决多线程并发的问题

    接着,我们可以创建一个静态的ReadWriterLockSlim实例,确保在整个应用程序中只有一个读写锁对象,以避免不同锁之间的竞争条件。 以下是使用读写锁的示例代码: ```csharp using System; using System.IO; using ...

Global site tag (gtag.js) - Google Analytics