[求助]关于Page池中Page对象重用的疑惑。
lkyooo
2007-01-06
当有一个Page已经存在于对象池中,我访问这个Page,Tapestry于是从池中取出这个Page对象,我想问两个问题?
这个取出是直接取的Page的引用还是做了一个Page的Copy? 当这次Page的业务完成后,是否会重新放入池中? 我自己的理解是再访问这个Page的时候,Tapestry从池中做了一份相应的Page对象的Copy,业务在这个复制的Page对象中完成,然后再放回池中覆盖原来的Page对象,这样就可以解决并发的问题,操纵的是Copy。 书上没有很详细的说明这个过程,只说是取出和放回,也可能是我现在还没看到那一页。不知道我的理解对不对,如果不对的话,希望前辈解释疑惑。 |
|
lkyooo
2007-01-06
我测试了一下Hashcode,一样的。可以确定取得的是引用,那么很奇怪的是当有多个表单提交到Page的时候,那些表单的属性都是Page中的变量,虽然initialize()可以重置所有参数,但是当多个表单的一起并发提交的时候,因为线程切换导致不同表单分别向一个Page对象填充,不是会造成属性混乱吗?虽然用synchronization的办法可以解决,但是效率就很低了?
这个并发的问题是怎么解决的? |
|
lkyooo
2007-01-07
在Tapestry In Action上找到了答案,当池中的Page被使用的时候,若同时遇到另一个Page请求,那么Tapestry会从池中取另一个同类的Page对象,如果池中没有可用的Page对象,那么会Render一个新的Page放到池中,这样池中的一种Page对象会存在多个,以应付并发请求。
情况基本上同数据库连接池。 |
|
蔡尧东
2010-03-17
![]() |