大家帮忙看看,static居然有多个值,这不合理啊。
1)这不可能是先后赋值的问题,因为如果值后,后面依然有空的。重复出现。
2)好像有三个不同的static(这不正常)
3)本身只有一个list,6个任务,现在输出的是3个list,18个任务,而且同样的任务有三个不同的实例,见hashcode,
有三个hashcode说明很可能有三个实例,就算三个实例是因为多线程的问题产生的,但static也三个什么意思。
1)这不可能是先后赋值的问题,因为如果值后,后面依然有空的。重复出现。
2)好像有三个不同的static(这不正常)
3)本身只有一个list,6个任务,现在输出的是3个list,18个任务,而且同样的任务有三个不同的实例,见hashcode,
有三个hashcode说明很可能有三个实例,就算三个实例是因为多线程的问题产生的,但static也三个什么意思。
解决方案 »
- 怎么用hql筛选所有的子类属性
- java.lang.NoClassDefFoundError: org/apache/commons/lang/StringUtils
- http协议通讯
- 怎么修改数据库配置文件?
- 关于分布式教学系统(j2ee)
- Unable to instantiate Action, messageAction, defined for 'message_browseMessage
- RMI
- 调试servlet时,每次做改动都要编译后重启jboss,有什么方法可以不用重启jboss??
- 非常简单的问题就是不懂(XML)
- 求助在JBuilder中的CMP实体Been中的关联的意思
- 求助!Dubbo + Spring MVC一访问就出现 No ConfigurableListable Set
- 如何用webmagic框架爬取QQ音乐的“歌手姓名”
这里的关键是 ConfigSet.SERVER_IP这个static有三个不同的值,两个null,一个172.29.1.99,就算是并发吧,那也是null,null,172.29.1.99,
第二次重复出现时应是172.29.1.99,172.29.1.99,172.29.1.99,怎么可能还是null,null,172.29.1.99,
这完全是三个不同的实例啊,但是问题是static变量怎么可能有多个实例。
====aaaaa====BaseAction Path(/data/tomcat/webapps/dlp_oa/WEB-INF/classes/)=========2019-10-26 13:55:45==========BaseAction(15493888)===========1-----N
====aaaaa====BaseAction Path(/data/tomcat/webapps/dlp_oa/WEB-INF/classes/)=========2019-10-26 13:55:49==========BaseAction(15493888)===========1-----N
====aaaaa====BaseAction Path(/data/tomcat/webapps/dlp_oa/WEB-INF/classes/)=========private static Integer count1 = 0; private void startTask()
{
synchronized(count1)
{
if(count1<1)
{
if(Ustring.getNotNull(ConfigSet.taskPath))
{
String shutdown = ConfigSet.getParam("taskShutdown");
if(Ustring.getNotNull(shutdown))
{
TaskManager.setShutDown(shutdown);
}
count1++;
System.out.println(Udate.getTexttNowDate()+"==========BaseAction("+Thread.currentThread().hashCode()+")==========="+count1+"-----"+shutdown);
System.out.println("====aaaaa====BaseAction Path("+this.getFilePath()+")=========");
TaskManager.run();
}
}
}
}
Integer拆箱装箱,虽然int值一样,然是装箱后的对象就变了
用String来举例吧,你可能容易理解,假设开始String s = “a”,线程1锁了,然后里面修改s=“b”,这是线程2再锁s,你认为这两把锁一样吗?很显然不一样,第一把锁锁“a”对象,第二把锁锁“b”对象,所以Integer也是一样的效果
至于你说的有三分拷贝,因为代码不全,没法判断,是否用了threadlocal,你用volatile修饰你的全局变量再试试
变量没有使用threadlocal,只是单static,,而且其中static list变量也变成了三个不同的,按理就算执行三次,最多也就是在list add了18次,现在不是,是三个不同的list,每个中有6个对象,你说的count1是否是int也不是关键,就是算我不用同步关键字,最后多次循环以后应该也就是一致的了吧,总不可能几分钟后还存在并发吧。因此关键的问题是所有的所有的被这三次加载的都变成了三个实例,包括所有的static都变成了三个不同实例,static变量能在什么情况能同时存在多个不同的变量,我的理解是只能在不同的项目,可是关键这在同一个项目里。
出现这种情况,除了threadlocal没法解释,你再好好查查你的taskmanager