当前在线人数9421
首页 - 分类讨论区 - 电脑网络 - 爪哇娇娃版 - 同主题阅读文章

此篇文章共收到打赏
0

  • 10
  • 20
  • 50
  • 100
您目前伪币余额:0
未名交友
[更多]
[更多]
Java concurrency的疑惑,难道我理解错了? (转载)
[版面:爪哇娇娃][首篇作者:dancingfrog] , 2015年08月10日11:51:22 ,965次阅读,3次回复
来APP回复,赚取更多伪币 关注本站公众号:
[分页:1 ]
dancingfrog
进入未名形象秀
我的博客
[回复] [回信给作者] [本篇全文] [本讨论区] [修改] [删除] [转寄] [转贴] [收藏] [举报] [ 1 ]

发信人: dancingfrog (Dancing Frog), 信区: Java
标  题: Java concurrency的疑惑,难道我理解错了? (转载)
发信站: BBS 未名空间站 (Mon Aug 10 11:51:22 2015, 美东)

【 以下文字转载自 Programming 讨论区 】
发信人: dancingfrog (Dancing Frog), 信区: Programming
标  题: Java concurrency的疑惑,难道我理解错了?
发信站: BBS 未名空间站 (Mon Aug 10 11:50:19 2015, 美东)

小弟刚开始学,有一事不明。

如果用synchronized,可以保证一个对象不会被同时写入。但我觉得就算synchronized
还是会有问题。比如x,y两个线程同时读并且试图写一个变量v

Time 0
x<--(read)--v=3
y<--(read)--v=3

Time 1
x---(write v+1)--->v //v becomes 4 after write
y---(write v+1)--->v //failed, because v is locked by x

Time 2
y---(write v+1)--->v //v is still 4, because the value read by y is 3.

这样看来,虽然synchronized可以保护写不同时进行,但无非是推迟了y写入v的时间,
问题依然是存在的。

请问这个问题java有解决吗?

--
※ 修改:·dancingfrog 於 Aug 10 11:50:57 2015 修改本文·[FROM: 129.]
※ 来源:·WWW 未名空间站 网址:mitbbs.com 移动:在应用商店搜索未名空间·[FROM: 129.]

 
Foxman
进入未名形象秀
我的博客
[回复] [回信给作者] [本篇全文] [本讨论区] [修改] [删除] [转寄] [转贴] [收藏] [举报] [ 2 ]

发信人: Foxman (今狐冲), 信区: Java
标  题: Re: Java concurrency的疑惑,难道我理解错了? (转载)
发信站: BBS 未名空间站 (Sat Aug 15 11:45:47 2015, 美东)

synchronization保证的是memory consistency
就是说在同一synchronized block里读写的结果和顺序是一致的(所以叫"
synchronized")
比如你这个y读写是分开的,如果放在一个synchronized block里就不会有问题
【 在 dancingfrog (Dancing Frog) 的大作中提到: 】
: 发信人: dancingfrog (Dancing Frog), 信区: Programming
: 标  题: Java concurrency的疑惑,难道我理解错了?
: 发信站: BBS 未名空间站 (Mon Aug 10 11:50:19 2015, 美东)
: 小弟刚开始学,有一事不明。
: 如果用synchronized,可以保证一个对象不会被同时写入。但我觉得就算
synchronized
: 还是会有问题。比如x,y两个线程同时读并且试图写一个变量v
: Time 0
: x<--(read)--v=3
: y<--(read)--v=3
: Time 1
: ...................



--
※ 来源:·WWW 未名空间站 网址:mitbbs.com 移动:在应用商店搜索未名空间·[FROM: 68.]

 
lidichen
进入未名形象秀
我的博客
[回复] [回信给作者] [本篇全文] [本讨论区] [修改] [删除] [转寄] [转贴] [收藏] [举报] [ 3 ]

发信人: lidichen (火木年华), 信区: Java
标  题: Re: Java concurrency的疑惑,难道我理解错了? (转载)
发信站: BBS 未名空间站 (Thu Aug 20 18:55:03 2015, 美东)

Look at the code below:

public class Example {

    private int i;
    synchronized public void plusOne() {
        i++;
    }
}

what's the problem? When thread x call plusOne method, x get the monitor of
Example, y cannot do anything with the synchronized method of Example, just
block there and wait. After x has done with plusOne, y can have opportunity
to call plusOne.
--
※ 来源:·WWW 未名空间站 网址:mitbbs.com 移动:在应用商店搜索未名空间·[FROM: 199.]

 
nobrain
进入未名形象秀
我的博客
[回复] [回信给作者] [本篇全文] [本讨论区] [修改] [删除] [转寄] [转贴] [收藏] [举报] [ 4 ]

发信人: nobrain (nobrain), 信区: Java
标  题: Re: Java concurrency的疑惑,难道我理解错了? (转载)
发信站: BBS 未名空间站 (Fri Dec 14 06:50:41 2018, 美东)

synchronized function 是一个原子操作,不是你理解的那样
--
※ 来源:·WWW 未名空间站 网址:mitbbs.com 移动:在应用商店搜索未名空间·[FROM: 45.]

[分页:1 ]
[快速返回] [ 进入爪哇娇娃讨论区] [返回顶部]
回复文章
标题:
内 容:

未名交友
将您的链接放在这儿

友情链接


 

Site Map - Contact Us - Terms and Conditions - Privacy Policy

版权所有,未名空间(mitbbs.com),since 1996