初探多线程(C#)

发布于 2014-08-07  108 次阅读


  1. 初探多线程(C#)
    初探多线程(C#)
    初探多线程(C#)
    初探多线程(C#)
  2. 补充概念(前台线程与后台线程)。前台线程能阻止应用程序的终止,既直到所有前台线程终止后才会彻底关闭应用程序。而对后台线程而言,当所有前台线程终止时,后台线程会被自动终止,不论后台线程是否正在执行任务。默认情况下通过Thread.Start()方法创建的线程都自动为前台线程,把线程的属性IsBackground设为true时就将线程转为后台线程。

     

  3. 多线程难点(并发问题演示)如果只看上面,多线程实在是太简单啦,多个线程无非就是多new几次而已,但是这里面有个问题,就是如果线程访问同一个资源,如网络订票,一个客户买了票,另一个客户再买的话,按道理说应该不能买啦,但是线程是独立运行的,两个线程互不干扰,怎么让另一个线程知道自己访问资源已经被修改了,这就涉及到线程同步的问题啦,同时各种熟悉的概念死锁,并发也来啦。修改程序代码如图所示。因为设置的是随机等待时间,所以运行结果不同。

    初探多线程(C#)
    初探多线程(C#)
    初探多线程(C#)
    初探多线程(C#)
  4. 线程同步,线程同步也成为阻塞调用,即没有执行完任务不返回,线程被挂起。可以使用C#中的lock关键字,在此关键字范围类的代码都将是线程安全的。lock关键字需定义一个标记,线程进入锁定范围是必须获得这个标记。当锁定的是一个实例级对象的私有方法时使用方法本身所在对象的引用就可以了。修改代码如下,运行结果如图所示

    初探多线程(C#)
    初探多线程(C#)