JAVA如何解决并发问题?
本文最后更新于48 天前,其中的信息可能已经过时,如有错误请发送邮件到big_fw@foxmail.com

为了解决线程不安全问题,可以通过JMM(JAVA内存模型)解决,JMM提供了多个方法来解决原子性、可见性、顺序性的问题

  1. 可见性:
    • volatile关键字可以保证可见性(一个线程对共享数据的修改可以立刻被其他线程看到)
    • synchronized关键字、lock方法:可以保证同一时刻只有一个线程获取锁执行同步代码,并且在锁释放前将变量的修改更新到主存,保证可见性
  2. 原子性:
    • JAVA能保证对单个操作的原子性,但不能保证多个操作的原子性
    • 想要实现更大范围的原子性,可以通过synchronized和lock实现
  3. 有序性:
    • volatile关键字可以保证一定范围的有序性
    • 可以通过synchronized和lock保证有序性
    • JMM是通过Happens-Before规则保证有序性的

此外,对于一些线程独有而不需要被共享的变量,还能通过使用ThreadLocal让每个线程都有自己独立的变量,从而避免共享,从而保证线程安全。

学习JMM JMM
学习Synchronized Synchronized
学习Volatile Volatile
学习Final Final
文末附加内容
暂无评论

发送评论 编辑评论


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