synchornized关键字

1. synchornized相关问题

锁的目的是让多个线程竞争同一个锁。有竞争关系就是安全的,没有就是不安全的。

  • 两个线程同时访问同一个对象的同步方法 (安全
    同一个对象的同步方法,即修饰的是普通方法,锁的是对象实例,两个线程访问时,一个线程使用对象的同步方法即该线程获取了对象的锁,也就是当前对象是不能够给其他线程使用的,值到当前线程释放该对象,其他线程才能进行访问。
  • 两个线程同时访问两个对象的同步方法 (不安全) test1.func1() test2.func1()
    当前的两个线程访问的是两个对对象,不冲突,所以把相当于锁是失效的。
  • 两个线程同时访问(一个或两个)对象的静态同步方法 (安全
  • 两个线程分别同时访问(一个或两个)对象的同步方法和非同步方法 (不安全
  • 两个线程访问同一个对象中的同步方法,同步方法又调用另外一个非同步方法 (不安全
  • 两个线程同时访问同一个对象的不同的同步方法 (安全
  • 两个线程同时访问静态synchronized和非静态synchornized方法 (不安全

2.synchronized的使用方法

1.可以修饰代码块:锁代码块

第一种:同步代码块
			灵活
			synchronized(线程共享对象){
				同步代码块;
			}

2.可以修饰普通方法:锁当前对象

第二种:在实例方法上使用synchronized
	表示共享对象一定是this
	并且同步代码块是整个方法体。

3.可以修饰静态方法:锁类

第三种:在静态方法上使用synchronized
	表示找类锁。
	类锁永远只有1把。
	就算创建了100个对象,那类锁也只有一把。
	对象锁:1个对象1把锁,100个对象100把锁。
    类锁:100个对象,也可能只是1把类锁。
  • 0
    点赞
  • 2
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值