线程一

写这篇博客的目的是因为网上众多的资料采用大篇幅文字介绍这个东西,感觉很枯燥,故而自己参考了被人的博客,微信文章总结了这篇文章,尽量减少各种名词的使用,有错误之处还望告知,虚心接受
synchronized的使用

1.作为java的内置关键字,其获取锁与释放锁由jvm控制,无需考虑因代码异常而无法释放锁

2.属于互斥锁(某个时刻仅允许一个线程访问)
3.分为对象锁 类锁
3.1 class锁 作用在类上 对于 所有的对象某个时刻只允许一个线程访问该方法
//1.静态方法同步
public static synchronized void add(int value){
    doSomthing...
 }
 //2.静态方法中的同步块
 public static add(){
     synchronized(Test.class){
    doSomething..
}

3.2 对象锁 作用在对象上 对于同一个对象某个时刻只允许一个时刻访问该方法

//1.实例方法同步
public synchronized  int get() {
     doSomthing...
}
//2.实例方法同步块
public add(){
     synchronized(this){
    doSomething..
}

3.3总结
3.3.1. 本质上线程访问synchronized 方法实际上就是获取锁,同一把锁每个是个只允许一个线程访问,如果各个方法上的锁不一致的话,各个方法是可以并发执行的。
3.3.2. synchronized 同步块最好不要用String类型 因为会出现字符串常量池的问题,导致可能本意是控制单个实例,结果导致控制所有的对象示例
3.3.3. 考虑一个场景 在一个类的多个方法上加了相同的锁 如果某个方法涉及执行io操作,需要花费很长时间,这样会导致其余线程不能执行其余方法,可以考虑单独加锁

4. 优点:操作简单,不需要考虑因为异常而导致无法释放锁
5. 缺点:粒度太宽,具体在下章讲解lock时作对比

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值