黑马程序员 .Net_线程的使用

------- Windows Phone 7手机开发.Net培训、期待与您交流! -------

 每个正在操作系统上运行的程序都是一个进程,一个线程可以包含一个或多个进程。线程是操作系统分配处理器时间的基本单元,在进程中可以有多个线程同时执行代码。

一、 单线程简介

单线程顾名思义,就是只有一个线程。默认情况下,系统为应用程序分配一个主线程,该线程执行程序中以Main开始和结束的代码。

二、多线程简介

一般情况下,需要用户交互的软件都必须尽可能地对用户的活动作出反应,以便提供丰富多彩的用户体验。但同时它又必须执行必要的计算,以便尽可能快的将数据呈现给用户,这时可以使用多线程来实现

1、多线程的优点和缺点

多线程技术是一把双刃剑,在使用时需要充分考虑它的优缺点。
多线程处理可以同时运行多个线程。由于多线程应用程序将程序划分成多个独立的任务,因此可以在以下方面显著提高性能:
(1)多线程技术使程序的响应速度更快 ,因为用户界面可以在进行其它工作的同时一直处于活动状态;

(2)当前没有进行处理的任务时可以将处理器时间让给其它任务;

(3)占用大量处理时间的任务可以定期将处理器时间让给其它任务;

(4)可以随时停止任务;

(5)可以分别设置各个任务的优先级以优化性能。

同样的 ,多线程也存在许多缺点 ,在考虑多线程时需要进行充分的考虑。多线程的主要缺点包括:
(1)等候使用共享资源时造成程序的运行速度变慢。这些共享资源主要是独占性的资源 ,如打印机等。

(2)对线程进行管理要求额外的 CPU开销。线程的使用会给系统带来上下文切换的额外负担。当这种负担超过一定程度时,多线程的特点主要表现在其缺点上,比如用独立的线程来更新数组内每个元素。

(3)线程的死锁。即较长时间的等待或资源竞争以及死锁等多线程症状。

(4)对公有变量的同时读或写。当多个线程需要对公有变量进行写操作时,后一个线程往往会修改掉前一个线程存放的数据,从而使前一个线程的参数被修改;另外 ,当公用变量的读写操作是非原子性时,在不同的机器上,中断时间的不确定性,会导致数据在一个线程内的操作产生错误,从而产生莫名其妙的错误,而这种错误是程序员无法预知的。

三、创建线程

要创建一个线程非常简单,只需将其声明并为其提供线程起始点处的方法委托即可。创建新的线程时需要使用Thread类,该类具有接受一个ThreadStart委托或parameterizedThreadStart委托的构造函数,该委托包装了调用Start方法时由新线程调用的方法。创建了Thread类的对象后,线程对象就已存在并已配置,但并未创建实际的线程,这时,只有在调用Start方法后,才会创建实际的线程。

如下:自定义一个静态的void类型方法createThread,然后在Main方法中通过实例化Thread类对象创建一个新的线程,最后调用Start方法启动该线程

static void Main(string[] args)
{
   Thread myThead;//声明线程
  myThead=new Thread(new ThreadStart(create Thread));//用线程起始点的ThreadStart委托创建该线程的实例
  myThead.Start();//启动线程
}
public static void createThread()
{
   console.write("创建线程");

四、线程的挂起、恢复、休眠和终止

创建完一个线程并启动后,还可以挂起、恢复、休眠或终止它。

线程的挂起和恢复分别可以通过调用Thread类中的Suspend方法和Resme方法实现。

1、Suspend方法

     该方法用来挂起线程,如果线程已挂起,则不起作用。

     语法如下:

   public void suspend();

2、Resme方法实现

     该方法用来继续已挂起的线程

     语法如下: 

   public void Resume();

3、线程休眠主要通过Thread类的Sleep方法实现

      将当前线程阻止指定的时间

      语法如下:

   public static  void Sleep(TimeSpan  timeout)

      例如:Thread.Sleep(1000);//使线程休眠一秒钟

4、终止线程可以使用Thread类的Abort方法和Join方法实现

       Abort方法 有两种重载

      语法如下:    

public void Abort()
public void Abort(object stateinfo)

     Join方法用来阻止调用线程,直到某个线程终止时为止。、

      语法如下: 

public void Join()

     实例如下:

using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using System.Threading;//引用线程命名空间



namespace 线程终止
{
    class Program
    {
        static void Main(string[] args)
        {
             Thread myThread;//声明线程
             myThread = new Thread(new ThreadStart(createThread));//用线程起始点的ThreadStart委托创建该线程的实例
             myThread.Start();//启动线程
            // myThread.Join();
             myThread.Abort();//终止线程
             Console.ReadKey();
        }
        public static void createThread()
        {
            Console.WriteLine("线程实例");
        }
    }
}



 

    

 

 


 

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值