我聲明一個Spring bean對於被用作工廠來創建對象的Java類。我想從不同的線程使用這個工廠,我遇到的問題是線程在嘗試使用工廠創建對象時被阻塞。的Spring bean線程安全
據我所知春豆在默認情況下單身,這就是我想要的。我希望工廠是一個單身人士,但我想從不同的線程使用這個工廠創建對象。工廠中的createObject()方法是不同步的,因此我不太明白爲什麼我有這個同步問題。
任何建議,哪些是實現這一目標的最佳途徑?
這是工廠的Java代碼:
public class SomeFactory implements BeanFactoryAware {
private BeanFactory beanFactory;
public List<ConfigurableObjects> createObjects() {
List<ConfigurableObjects> objects = new ArrayList<ConfigurableObjects>();
objects.add((SomeObject)beanFactory.getBean(SomeObject.class.getName()));
return objects;
}
public void setBeanFactory(BeanFactory beanFactory) throws BeansException {
this.beanFactory = beanFactory;
}
}
我發現這個線程:http://forum.springsource.org/showthread.php?t=46101它似乎是由bean引用的Java類的方法是不同步的,除非你寫他們的同步。 – yeforriak 2010-08-13 15:14:14
當然不是。 Spring仍然是Java;它不會讀你的想法。單身人士必須以線程安全的方式編寫。 – duffymo 2010-08-13 15:49:02
你需要發佈一些代碼。通常情況下,工廠不應該攜帶很多狀態,所以工廠方法通常不應該阻塞。如果你沒有同步任何東西,任何東西都不應該阻塞(雖然狀態可能會混亂)。你在做什麼你的createObject方法? – 2010-08-14 21:23:17