1

我有一个包含许多功能的组件“bulletin.cfc”。

我的主页上有两个使用 cfthread 标签运行的线程。

来自.net,我想我会创建组件的两个实例,并在每个线程中使用一个。这样他们就不会互相干扰,我也不需要担心在函数中加锁。

<cfset bullObj = new bulletin()>
<cfset bullObj2 = new bulletin()>

它是否正确?

编辑:

到目前为止,感谢您的回答,但我仍然无法理解与此相关的问题。我在两个单独的 cfthread 元素中有以下代码:

<cfset listCount = 1>
    <cftry>
    <cfquery name="ins" datasource="#datasourceVar#" >
        INSERT INTO element_user_shown
        (elementid, userid, date_shown)
        (
        <cfloop list="#elementIDList#" index="lcv">
        SELECT #lcv#, #tmpuserid#, GETDATE()
            <cfif listCount LT listlen(elementIDList)>
                UNION ALL
            </cfif>
        <cfset listCount = listCount + 1>
        </cfloop>   
        )               
    </cfquery>  

这会每晚运行大约 70,000 次,但每次都会出现大约 3-4 个错误。检查看起来像错误的sql

        INSERT INTO element_user_shown
                        (elementid, userid, date_shown)
                        (

                            SELECT 621, 267509, GETDATE()

                            UNION ALL

                            SELECT 586, 267509, GETDATE()

                            UNION ALL

                            SELECT 594, 267509, GETDATE()

                            UNION ALL

                            SELECT 613, 267509, GETDATE()

                            SELECT 622, 267509, GETDATE()

                            SELECT 599, 267509, GETDATE()

                            SELECT 602, 267509, GETDATE()                               

                        )
4

1 回答 1

1

您是正确的,您的实例是通过引用传递的,因此可能存在并发问题。但是,如果您的函数参数被正确参数化并且您没有将属性作为实例的一部分进行更改(换句话说,这是一个接口而不是 bean),您可以安全地重用同一个实例。每个函数调用都是它自己的范围,其中的变量和返回的变量都是函数调用的生命周期。

于 2012-08-04T17:26:47.710 回答