单机锁
本文最后更新于380 天前,其中的信息可能已经过时,如有错误请发送邮件到3368129372@qq.com

syncronized与lock的区别

都是Java中用去解决线程安全问题的工具,是Java实现线程同步的方式。

  • 身份:synchronized是Java内置关键字;Lock是个Java提供的一个接口,
  • 释放角色:synchronized锁的释放是由JVM来决定的(异常或者运行完成);Lock可由开发者手动释放(建议释放锁放在finally,确保一定被释放)
  • 锁粒度:synchronized锁住的是对象,而lock锁住的是代码块。即synchronized.只允许同一时间有目只有一个线程访问被修饰的方法或代码块;Lock可以针对不同的代码块分别加锁,允许多线程同时访问不同的代码块。
  • 公平锁:synchronized.不支持公平锁,Lock支持公平锁。公平锁意味着等待时间最长的线程获得锁,避免"饥饿"问题的出现。
  • 等待中断:synchronized修饰的方法或者代码块是不允许被中断的;Lock接口则提供了中断等待锁线程的方法,如newCondition()方法
    gpt回答:

    以及

    可重入锁

    lock.lock()加锁;
    加锁后改变锁的所属人
    加锁后内部status(默认为0)+1;
    每次加锁时判断是否有人加过锁,加过锁的话是不是自己加的(锁的所属人是否是自己),是自己加的话,status再次+1;

  • 公平锁:先来的先获取锁,可使用park()与unpark()方法实现。
  • 非公平锁: 随机抢,使用cas。

对于公平锁来说,每次加锁前还要判断有没有人来排队

感谢您的收看~
暂无评论

发送评论 编辑评论


				
|´・ω・)ノ
ヾ(≧∇≦*)ゝ
(☆ω☆)
(╯‵□′)╯︵┴─┴
 ̄﹃ ̄
(/ω\)
∠( ᐛ 」∠)_
(๑•̀ㅁ•́ฅ)
→_→
୧(๑•̀⌄•́๑)૭
٩(ˊᗜˋ*)و
(ノ°ο°)ノ
(´இ皿இ`)
⌇●﹏●⌇
(ฅ´ω`ฅ)
(╯°A°)╯︵○○○
φ( ̄∇ ̄o)
ヾ(´・ ・`。)ノ"
( ง ᵒ̌皿ᵒ̌)ง⁼³₌₃
(ó﹏ò。)
Σ(っ °Д °;)っ
( ,,´・ω・)ノ"(´っω・`。)
╮(╯▽╰)╭
o(*////▽////*)q
>﹏<
( ๑´•ω•) "(ㆆᴗㆆ)
😂
😀
😅
😊
🙂
🙃
😌
😍
😘
😜
😝
😏
😒
🙄
😳
😡
😔
😫
😱
😭
💩
👻
🙌
🖕
👍
👫
👬
👭
🌚
🌝
🙈
💊
😶
🙏
🍦
🍉
😣
Source: github.com/k4yt3x/flowerhd
颜文字
Emoji
小恐龙
花!
上一篇
下一篇