《JAVA并发编程实战》里有个样例我不是太懂,求解惑

《JAVA并发编程实战》里有个样例我不是太懂,求解惑

女中豪杰 发布于 2021-11-27 字数 593 浏览 663 回复 14
public class MutableInteger {
	private int value;

	public int getValue() {
		return value;
	}

	public void setValue(int value) {
		this.value = value;
	}
	
}

书里说这里的get,set方法是非线程安全的,我很疑惑的是,在我们的现实代码里不是经常写这玩意么,MVC模式,每创建一个model定义好变量之后就会写get,set方法,为啥没出现他说的情况呢?

@爱迪生与钢弹战士   哥们你看了无数遍了,可否解答一下小弟的疑惑

PS:程序清单 3-2 书P29

如果你对这篇文章有疑问,欢迎到本站 社区 发帖提问或使用手Q扫描下方二维码加群参与讨论,获取更多帮助。

扫码加入群聊

发布评论

需要 登录 才能够评论, 你可以免费 注册 一个本站的账号。

评论(14

惜醉颜 2021-12-01 13 楼

一个WEB应用,那么多连接,也是单线程??

倚栏听风 2021-12-01 12 楼

回复
一个连接一个线程

辞别 2021-12-01 11 楼

是的

梅窗月明清似水 2021-12-01 10 楼

我们平常都到单线程调用一个对象,没有资源竞争也就没有线程安全问题;如果两个以上的线程可能同时调用同一个对象那么就有可能产生资源竞争的情况,没有加锁的情况下数据可能出错,所以线程不安全。

无人问我粥可暖 2021-12-01 9 楼

我知道他的意思,我的意思主要是想知道为什么现实的使用中会这么写,然后没出现线程不安全的情况

把回忆走一遍 2021-12-01 8 楼

首先你需要了解下jvm的内存模型,我就不在这细说,大致的意思是内存中jvm有局部内存一说,当多线程同时访问你的这个value的时候,有可能有同时多个set和多个get, 假如一个set已经执行了,但是这个执行的结果,没有写到共享内存中,还在局部内存里,这样你get的时候会取到一个过期的值,这种不算最糟糕的,可能你set的结果只写会到共享内存中一半,这时你取到的值,是个根本不存在的值。

说的有点绕,先把java并发实践多看几遍就好了。

疑心病 2021-12-01 7 楼

继续看书你就明白了

各自安好 2021-11-30 6 楼

线程安全不安全,首先要看有没有对象的可见性和是否共享。你看第三章就可以知道为啥我们平常用都没问题。看无数遍其实我是吹牛皮的,我是看了很多遍,但是从来没写过代码,哈哈哈

偏爱自由 2021-11-29 5 楼

另外在spring mvc框架中由于sevlet就是线程安全的,所我们才在平常开发不会注意到这种get和set的问题。

嗯,我知道了,谢谢了

已下线请稍等 2021-11-28 2 楼

我也悟出来了,其实造的MODEL不是存在内存中供其他的线程访问的,而是写入数据库或者返回给页面,所以不存在其他线程访问的情况

巡山小妖精 2021-11-28 1 楼

在MVC模式中,我们虽然是多线程在允许,但是我们不会再多线程中一般不会同时调用一个model,比如说

service->dao->model,用到的model都是new出来封装的,所以就不存在线程安全,你不信可以看看mybatis源码