2011-10-04 23 views
2

由于并发访问,我遇到了数据结构损坏的问题。我试图排除可能的原因,但我不确定春天是如何工作的。Spring TransactionTemplate是否创建线程?

有多个线程将独立列表传递给CallbackHandler的构造函数。然后这个CallbackHandler被传递给TransactionTemplate的执行方法。任何地方都没有同步块。

该列表在CallbackHandler中以及执行方法完成之前和之后的调用线程中访问。据我了解呼吁执行不是开始一个新的Thread。因此,这应该是安全的。

每个线程创建自己的独立列表和CallbackHandler,只有TransactionTemplate是相同的所有。

还是Spring在某些时候创建了一些新线程?

+1

你能否详细说明“由于并发访问导致数据结构损坏”。 “那些”列表中的一个是否被损坏?它在提交时是否损坏?你有'CallbackHandler'等共享状态/静态,等等。 – tolitius

回答

4

您可以查看TransactionTemplatehere的源代码。

正如你所看到的,没有创建新的线程。

你确定你的线程安全错误不在代码的另一个区域吗?也许这会有助于看到你在做什么的一些例子。

+0

+1,除了不创建新线程外,[TransactionTemplate本身完全是线程安全的](http://stackoverflow.com/questions/ 6747478 /是最弹簧TransactionTemplate的-和SimpleJdbcTemplate进行线程安全的)。 –

+0

是的,它是在代码的其他领域。但是你的回答为我节省了几个小时,而不是在模板部分搜索:-) –

相关问题