NutzCN Logo
问答 ObjectFactory.getObject多线程存在Object锁竞争
发布于 228天前 作者 qq_a96bd60c 1449 次浏览 复制 上一个帖子 下一个帖子
标签:

多线程环境,其中一个使用频繁的对象,使用的是工厂模式,代码如下:

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锁竞争是合理的吗,还是说我们调用代码有问题?

0 回复
添加回复
请先登陆
回到顶部