队列处理组件源代码点评

以下代码是我设计的队列处理服务器。
其功能是将并行数据保存到队列缓存中,然后由统一的线程来处理提交的目的。
其设计目的是缓解数据库服务器处理压力
目前该队列处理组件已经投入使用,欢迎大家的点评。

 '队列服务器
    Public MustInherit Class SequenceServer


#Region "字段申明"
        Protected _dataList As New ArrayList(256)
        Protected _t As Thread '当前线程的引用
        Protected _stopflag As Boolean = False '停止挂起执行的标记
#End Region


        '队列数据处理
        '处理完成后,将数据从队列中移出
        '如果该队列中的对象没有执行IDispose接口,那么重写该接口

        Protected Overridable Sub SequenceProcess()
            Dim obj As IDisposable
            While True
                If Me._dataList.Count > 0 Then
                    Try
                        Me.DataProcess(Me._dataList(0))
                        obj = Me._dataList(0)
                        Me._dataList.RemoveAt(0)
                        If Not IsNothing(obj) Then obj.Dispose()
                    Catch ex As Exception
                        '如果DataProcess中出现异常,那么移出当前队列中的元素
                        obj = Me._dataList(0)
                        If Not IsNothing(obj) Then obj.Dispose()
                        Me._dataList.RemoveAt(0)

                    End Try
                  
                Else
                    '将线程挂起
                    If Not Me._stopflag Then Me._t.Suspend()
                End If
            End While
        End Sub

        '数据处理,该方法必须被override,以处理队列中的数据
        Protected Overridable Function DataProcess(ByVal data As Object) As Boolean

        End Function

        '添加处理数据到队列
        Public Sub Add(ByVal data As Object)
            Me._dataList.Add(data)

            If Me._t.ThreadState = ThreadState.Suspended Then Me._t.Resume()
        End Sub

        '初始化方法,开始队列数据的处理
        Public Sub New()
            Me._t = New Thread(AddressOf Me.SequenceProcess)
            Me._t.Start()
        End Sub


        '终止当前执行线程
        Public Function StopProcess() As Boolean
            '判断当前的队列处理线程是否已经挂起
            '如果挂起:那么从新启动该线程,并将_stopflag=true来防止在DataProcess中将其再次置为挂起
            '关闭队列处理线程
            If Me._t.ThreadState = ThreadState.Stopped Then Return True

            If Me._t.ThreadState = ThreadState.Suspended Then
                Me._stopflag = True
                Me._t.Resume()
                Me._t.Abort()
                Return True
            Else
                Return False
            End If
        End Function

        '获取当前队列中数据的数量
        Public ReadOnly Property DataCount() As Int32
            Get
                Return Me._dataList.Count
            End Get
        End Property
    End Class 

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

明天好,会的

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值