prototype线程安全问题
prototype 不存在线程安全问题??? 我觉得这根本没有任何直接的联系
所谓有无线程安全问题,是指 【一段代码是否同时操作同一个 属性变量】
1.如上图所示,userDAO类中的代码 假设它是使用 singleton且有属性变量, 意味着它的属性变量是唯一的, 此时如果它 操作自己的属性变量 是会造成 线程安全,但 prototype不会,因为它有多个实例,它的属性变量不唯一。
2. 但现在假设 userDAO类中的代码 假设它是使用 prototype且有属性变量,因为它有多个实例,它的属性变量不唯一, 由此就能推出线程安全?? 根本不是!! 因为 userDAO类中的函数 操作自己的属性当然没问题,,但 我类中的函数 操作其它 类的唯一属性变量,不是依旧会出现 线程安全问题??
总结 是否出现线程安全问题,根本不是 使不使用 prototype或者singleton 的关系,可以说两者没有任何直接的联系,, 归根到底是 【某一函数有没 操作同一变量】 如果有,即使使用prototype一样会出现线程安全,例子如上述2
我的理解对吗?
正在回答
同学你好,
老师理解了一下,同学的意思是不是就是,这种情况?
如果是,那么其实线程安全问题其实是这个全局唯一变量的问题,那么解决这个线程安全问题,我们可能就会采取对这个变量加锁,或者消息队列等方式,也就是扣到同学最初的主题上了。同学最初的这个总结上,理解是对的。
而老师课程中所说的,多例是线程安全的,其实是说,这个bean中,如果有属性,有存储数据时(非静态变量),线程是安全的。
这里说法确实不是非常的严谨,这个我们也会反馈给老师。
只是希望同学能理解这个意思。祝学习愉快。
同学你好,同学举的例子不太合适。
多例的Dao对象单线程操作一个其他类的唯一属性,这里的线程安全问题是由其他类的唯一属性造成的,并不是多例造成的。例如,多个Dao操作数据库中某一行,数据库中会给该行数据加锁,避免造成线程安全问题。这里的线程安全问题并不是Dao造成的,实际的工作中,如果有线程安全问题,会对其进行处理的,例如数据库中对某行数据加锁;使用消息队列等。
Service调用Dao出现线程安全问题是由单线程的Dao造成的,线程安全问题需要由Dao处理。
如果将单线程的Dao变成多线程,多个Service操作多个Dao,一个Service对应一个Dao,Service单线程执行Dao中的方法,不存在并发的问题。
祝:学习愉快~
同学你好,1、同学对于线程安全的理解是正确的,线程安全其实就是指当多个线程访问同一个变量时,该变量不会因为多线程访问产生意想不到的问题。
2、同学的举例,在实际应用中,我们不会这样去使用。
因为作为prototype是为每一个线程创建它的一个对象实例,那么在这个对象实例执行的时候,无论执行这个实例中的多少个方法,因为它是单线程执行,所以它是按时序来进行的,不存在并发的问题,也就是说它并不会出现在一个线程中,同时执行A和同时执行B的情况。除非是在这个对象中自己又书写了一个多线程的处理,它才会出现这种可能。
课程中老师是站在实际开发中的角度去讲解的这个线程的问题,所以说prototype是线程安全的,同学的建议小慕也会反馈给老师的。
如果我的回答解决了你的疑惑,请采纳!祝学习愉快!
- 参与学习 人
- 提交作业 9393 份
- 解答问题 16556 个
综合就业常年第一,编程排行常年霸榜,无需脱产即可学习,北上广深月薪过万 无论你是未就业的学生还是想转行的在职人员,不需要基础,只要你有梦想,想高薪
了解课程
恭喜解决一个难题,获得1积分~
来为老师/同学的回答评分吧
0 星