多线程示例代码

Imports System
Imports System.Threading
Public Module ThreadSample
    Public Balance As Integer = 1000
    Sub Main()
        Dim account As Account = New Account()
        Dim depositeBalance1 As DepositeBalance = New _
                DepositeBalance(account, 1000, "Customer 1")
        Dim depositeBalance2 As DepositeBalance = New _
           DepositeBalance(account, 1000, "Customer 2")
        Dim t1 As Thread = New _
             Thread(AddressOf depositeBalance1.DepositeAmount)
        Dim t2 As Thread = New _
        Thread(AddressOf depositeBalance2.DepositeAmount)
        t1.Start()
        t2.Start()
        Try
            '阻塞调用线程,直到某个线程终止时为止
            t1.Join()
            't2.Join()
        Catch e As Exception
            Console.Write(e.ToString())
        Finally
            'Do Nothing
        End Try
    End Sub
    Public Class Account
        Private balanceAmount As Integer
        Public Sub Deposite(ByVal amount As Integer, _
            ByVal message As String)
            Console.WriteLine(message & _
                " Depositing Amount " & amount)
            Console.WriteLine(message & " Checking Previous Balance")
            'Monitor 类通过向单个线程授予对象锁来控制对对象的访问。对象锁提供限制访问代码块(通常称为临界区)的能力。当一个线程拥有对象的锁时,其他任何线程都不能获取该锁。还可以使用 Monitor 来确保不会允许其他任何线程访问正在由锁的所有者执行的应用程序代码节,除非另一个线程正在使用其他的锁定对象执行该代码。
            '临界区的开头,保证只能有一个线程来操作
            Monitor.Enter(Me)
            balanceAmount = getBalance()
            Console.WriteLine(message & _
                " Previous Balance in Account " & balanceAmount)
            balanceAmount += amount
            Console.WriteLine(message & _
               " Updating Balance in Account ")
            setBalance(balanceAmount)
            Monitor.Exit(Me)
            '记临界区的结尾
            Console.WriteLine(message & " Update Balance " & Balance)
           
        End Sub
        Private Function getBalance() As Integer
            Try
                '将当前线程阻塞指定的毫秒数
                Thread.Sleep(1000)
            Catch e As Exception
                Console.WriteLine(e.ToString())
            Finally
                'Do Nothing
            End Try
            Return Balance
        End Function
       
        Private Sub setBalance(ByVal amount As Integer)
            Try
                '将当前线程阻塞指定的毫秒数
                Thread.Sleep(1000)
            Catch e As Exception
                Console.WriteLine(e.ToString())
            Finally
                'Do Nothing
            End Try
            Balance = amount
        End Sub
    End Class
   
    Public Class DepositeBalance
        Private account As Account
        Private amount As Integer
        Private message As String
       
        Public Sub new(ByRef account As Account, _
         ByVal amount As Integer, ByVal message As String)
            MyBase.New()
            Me.account = account
            Me.amount = amount
            Me.message = message
        End Sub
        Public Sub DepositeAmount()
            Account.Deposite(amount, message)
        End Sub
    End Class
End Module
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值