Redian新闻
>
Java concurrency的疑惑,难道我理解错了? (转载)
avatar
Java concurrency的疑惑,难道我理解错了? (转载)# Java - 爪哇娇娃
t*g
1
j1去的美国,呆了一年就回国了,一直以为只有H1才能申请绿卡,所以一直没留意着事
情,后来听说j1也可以申请,但时间上已经来不及了,现在已经回国并进入服务期,请
问这样的情况下还能在国内申请EB1A吗?怎么个申请法?不甚感激。
avatar
d*g
2
【 以下文字转载自 Programming 讨论区 】
发信人: dancingfrog (Dancing Frog), 信区: Programming
标 题: Java concurrency的疑惑,难道我理解错了?
发信站: BBS 未名空间站 (Mon Aug 10 11:50:19 2015, 美东)
小弟刚开始学,有一事不明。
如果用synchronized,可以保证一个对象不会被同时写入。但我觉得就算synchronized
还是会有问题。比如x,y两个线程同时读并且试图写一个变量v
Time 0
xyTime 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有解决吗?
avatar
t*g
3
没人愿意回答吗
avatar
F*n
4
synchronization保证的是memory consistency
就是说在同一synchronized block里读写的结果和顺序是一致的(所以叫"
synchronized")
比如你这个y读写是分开的,如果放在一个synchronized block里就不会有问题

synchronized

【在 d*********g 的大作中提到】
: 【 以下文字转载自 Programming 讨论区 】
: 发信人: dancingfrog (Dancing Frog), 信区: Programming
: 标 题: Java concurrency的疑惑,难道我理解错了?
: 发信站: BBS 未名空间站 (Mon Aug 10 11:50:19 2015, 美东)
: 小弟刚开始学,有一事不明。
: 如果用synchronized,可以保证一个对象不会被同时写入。但我觉得就算synchronized
: 还是会有问题。比如x,y两个线程同时读并且试图写一个变量v
: Time 0
: x: y
avatar
i*u
5
You can file I-140 now, even you're in China. However, you can't file 485
before either your service date ends or you have waived the two year
restriction.
avatar
l*n
6
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.
avatar
d*g
7
【 以下文字转载自 Programming 讨论区 】
发信人: dancingfrog (Dancing Frog), 信区: Programming
标 题: Java concurrency的疑惑,难道我理解错了?
发信站: BBS 未名空间站 (Mon Aug 10 11:50:19 2015, 美东)
小弟刚开始学,有一事不明。
如果用synchronized,可以保证一个对象不会被同时写入。但我觉得就算synchronized
还是会有问题。比如x,y两个线程同时读并且试图写一个变量v
Time 0
xyTime 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有解决吗?
avatar
F*n
8
synchronization保证的是memory consistency
就是说在同一synchronized block里读写的结果和顺序是一致的(所以叫"
synchronized")
比如你这个y读写是分开的,如果放在一个synchronized block里就不会有问题

synchronized

【在 d*********g 的大作中提到】
: 【 以下文字转载自 Programming 讨论区 】
: 发信人: dancingfrog (Dancing Frog), 信区: Programming
: 标 题: Java concurrency的疑惑,难道我理解错了?
: 发信站: BBS 未名空间站 (Mon Aug 10 11:50:19 2015, 美东)
: 小弟刚开始学,有一事不明。
: 如果用synchronized,可以保证一个对象不会被同时写入。但我觉得就算synchronized
: 还是会有问题。比如x,y两个线程同时读并且试图写一个变量v
: Time 0
: x: y
avatar
l*n
9
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.
avatar
n*n
10
synchronized function 是一个原子操作,不是你理解的那样
相关阅读
logo
联系我们隐私协议©2024 redian.news
Redian新闻
Redian.news刊载任何文章,不代表同意其说法或描述,仅为提供更多信息,也不构成任何建议。文章信息的合法性及真实性由其作者负责,与Redian.news及其运营公司无关。欢迎投稿,如发现稿件侵权,或作者不愿在本网发表文章,请版权拥有者通知本网处理。