我正在开发一个Java Spring MVC项目,并且我很犹豫在Java Spring Bean中使用实例变量。我想问一些关于这个主题的问题。Java Spring Bean中的实例变量
我在我的Java Spring Bean中使用了一个实例变量,它的类型是String。
private String abc = "hell";
正如我们所知,Java Spring默认范围是Singleton,它们是在项目启动时构建的。它是单实例,我的实例变量必须是线程安全的。
我在bean的方法中使用了这个变量“abc”,当它们被多个线程到达时,它会损害每个线程数据的一致性吗?
例如,线程1到达bean并将abc变量改为“hello”。那时,线程1引用abc变量point“hell”或“hello”?我很困惑这个话题。
我使字符串ABC变量ThreadLocal
目的是提供每个线程持有自己的ABC variable.But我已阅读,使用ThreadLocal
对象时出现据说它是固定在Tomcat.After 7.0版的Tomcat存储器泄漏。
因为每个线程拥有自己的变量,当他们回到这是由container.But管理线程池,恢复池的作业完成,ThreadLocal的对象不被破坏,它们造成内存泄漏。
此外,String对象是不可变的,所以在理论视图中它是否会导致多线程问题?
是每个线程都拥有自己的字符串变量吗?例如,线程1触发并启动方法调用,并创建单独的字符串变量“abc”和线程2触发器,然后创建新的字符串变量“abc”,并相互损害“abc”变量?
我真的很想知道这个用法的概念,并且很想学习答案。
我在一个方法中使用了ThreadLocal对象,并且此方法由JSP调用。方法的第一行从方法参数中取得ThreadLocal对象集的值。因此,“但是您需要非常小心地在每次请求后清除状态。”我提供这个声明,如果我理解正确,那么没问题。如果发生内存泄漏,我将为servlet过滤器设置ThreadLocal对象。我是对吧? –