多线程环境,其中一个使用频繁的对象,使用的是工厂模式,代码如下:
public MessageService getInstance() {
return ObjectFactory.getObject(MessageService.class);
}
Jconsole显示堆栈信息如下:
名称: Thread-16
状态: java.lang.Object@3137d8b0上的BLOCKED, 拥有者: pool-2-thread-18
总阻止数: 137,264, 总等待数: 0
堆栈跟踪:
org.nutz.ioc.impl.NutIoc.get(NutIoc.java:152)
org.nutz.ioc.impl.NutIoc.get(NutIoc.java:199)
org.nutz.ioc.ObjectFactory.getObject(ObjectFactory.java:108)
org.nutz.ioc.ObjectFactory.getObject(ObjectFactory.java:81)
XXX.XXXServiceFactoryDefault.getInstance(MessageServiceFactoryDefault.java:11)
XXX.XXXSocketHandler.<init>(GmsSocketHandler.java:43)
XXX.XXXServerImpl.start(GmsServerImpl.java:76)
XXX.XXXLoader$2.run(CommLoader.java:30)
java.lang.Thread.run(Thread.java:748)
查看IOC获取对象会给Object对象加synchronized
/* 193 */ synchronized (lock_get) {
/* 194 */ return op.get(type, ing);
/* */ }
/* */ }
想问下这个ioc获取对象造成的Object锁竞争是合理的吗,还是说我们调用代码有问题?