`
benx
  • 浏览: 272211 次
  • 性别: 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");
	}
}
 
分享到:
评论

相关推荐

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

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

    Visual C++程序开发范例宝典(光盘) 第八部分

    实例281 静态交叉表(SQL Server 2000) 实例282 动态交叉表(SQL Server 2000) 9.17 函数查询 实例283 在查询语句中使用字符串函数 实例284 在查询中使用日期函数 实例285 在查询时为表中的空字段添加默认信息 ...

    51单片机c语言实例100

    实例9:用P0口、P1 口分别显示加法和减法运算结果 8 实例10:用P0、P1口显示乘法运算结果 9 实例11:用P1、P0口显示除法运算结果 9 实例12:用自增运算控制P0口8位LED流水花样 10 实例13:用P0口显示逻辑"与"运算...

    java范例开发大全

    实例154 使用静态成员变量计算内存中实例化的对象数目 239 实例155 实现加减乘除的方法 240 8.3 面向对象的设计模式 241 实例156 Singleton单例模式 242 实例157 招聘(简单工厂模式) 243 实例158 同学聚会(工厂...

    51单片机基础应用设计C语言实例(400例)合集.zip

    51单片机基础应用设计C语言实例(400例)合集: 10-LED循环左移 100-24c02记忆开机次数 101-24c02存储上次使用中状态 102-DS1302 时钟原理 103-DS1302可调时钟 104-DS1302时钟串口自动更新时间 105-1602液晶显示DS...

    单片机100实例

    实例 63:用LED数码显示器伪静态显示数字 1234.........................................51 实例 64:用数码管显示动态检测结果 ............................................................51 实例 65:数码...

    创建型 结构型 设计型设计模式相关知识

    在静态方法中创建实例,避免多个线程同时调用方法,我们可以加线程锁, 在方法中使用双判断语句:最外层判断是为了提高运行速率,检查如果静态字段中已经存在实例了就可以直接return;第二层判断是避免创建多个对象...

    Java范例开发大全(全书源程序)

    实例154 使用静态成员变量计算内存中实例化的对象数目 239 实例155 实现加减乘除的方法 240 8.3 面向对象的设计模式 241 实例156 Singleton单例模式 242 实例157 招聘(简单工厂模式) 243 实例158 同学聚会...

    大厂真题之字节跳动-Java初级

    - 静态方法(加的锁为类锁); - 代码块(对象锁与类锁均可); 2. Lock 采用 lock()对代码加锁,unlock()进行解锁 参考文章:https://blog.csdn.net/yx0628/article/details/79086511 2、怎么利用反射获取类中的...

    高级开发并发面试题和答案.pdf

    synchronized关键字加在静态方法和实例方法的区别; 用锁的注意点; cas机制可能导致的问题ABA,什么是ABA; 程序开多少线程合适; 实现一下DCL(双重检查锁) stream 和 parallelStream区别; 实现一个阻塞队列(用...

    Visual C++程序开发范例宝典(光盘) 第四部分

    实例281 静态交叉表(SQL Server 2000) 实例282 动态交叉表(SQL Server 2000) 9.17 函数查询 实例283 在查询语句中使用字符串函数 实例284 在查询中使用日期函数 实例285 在查询时为表中的空字段添加默认信息 ...

    Visual C++ 程序开发范例宝典 源码 光盘 part2

    9.16 交叉表查询 cc实例279 利用TRANSFORM分析数据 cc 实例280 利用TRANSFORM动态分析数据 cc实例281 静态交叉表(SQLcServerc2000) cc实例282 动态交叉表 (SQLcServerc2000) 9.17 函数查询 cc实例283 ...

    Visual C++程序开发范例宝典(PDF扫描版).part3

     cc实例226 对SQLServer数据库进行录入和提取多媒体文件   cc实例227 对SQLcServer数据库进行录入和存储Word文档   8.10 数据备份恢复   cc实例228 Access数据库备份与还原   cc实例229 SQLcServer...

    Visual C++程序开发范例宝典(PDF扫描版).part2

     cc实例226 对SQLServer数据库进行录入和提取多媒体文件   cc实例227 对SQLcServer数据库进行录入和存储Word文档   8.10 数据备份恢复   cc实例228 Access数据库备份与还原   cc实例229 SQLcServer...

    Java开发实战1200例(第1卷).(清华出版.李钟尉.陈丹丹).part3

    实例136 使用重入锁实现线程同步 176 实例137 使用线程局部变量实现线程同步 177 实例138 简单的线程通信 179 实例139 简单的线程死锁 180 实例140 解决线程的死锁问题 182 6.3 线程的进阶 183 实例141 使用阻塞队列...

Global site tag (gtag.js) - Google Analytics