在coldfusion页面中使用cfc和线程

时间:2012-08-03 16:16:57

标签: multithreading coldfusion cfc

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

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

来自.net我想我会创建组件的两个instrances,并在每个线程中使用一个。这样他们就不会互相混淆,我也不用担心把锁放在函数中。

<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()                               

                        )

1 个答案:

答案 0 :(得分:1)

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