多线程2-线程操作及基本属性

1.终止线程

   当一个线程执行很长时间也没有结束,有时候需要手动取消,释放资源。可以使用终止线程。使用Thread的示例方法Abort(),不过此方法已经被微软标记为废弃。以下代码仅演示终止的效果。一般不建议使用此方法。因为终止可能随时,引发一些异常

 class Program
    {
        static void Main(string[] args)
        {
            Thread t = new Thread(PrintNum);
            t.Name = "ThreadT";
            t.Start();

            Thread.Sleep(TimeSpan.FromMilliseconds(1100));
            t.Abort();

            Console.WriteLine("Main thread", Thread.CurrentThread.Name);
        }
        static void PrintNum()
        {
            Console.WriteLine("Thread t starting...");
            Thread.Sleep(TimeSpan.FromSeconds(1));
            for(int i=1;i<10;i++)
            {
                Console.WriteLine("{0},{1}",Thread.CurrentThread.Name,i);
                Thread.Sleep(TimeSpan.FromMilliseconds(50));
            }
        }
    }

开始子线程运行,过了一会,主线程终止线程。运行效果如下:

可以发现,程序提示了当前平台不支持异常,主线程抛出异常。

2.线程状态

   线程状态定义在枚举ThreadState里面,定义枚举开始时是Unstarted,启动以后是Running。如果线程进入等待,状态可能是WaitSleepJoin。在程序中,可以根据这些状态进行一些操作;

3.线程优先级

    线程优先级定义在枚举ThreadPriority中,操作系统有优先执行标记为Highest线程,有剩余资源才会执行优先级比较低的线程

4.前台线程和后台线程

    前面线程默认都是前台线程,当指定IsBackground=true时候,是后台线程。前台线程和后台线程的区别就是。主线程需要等待所有前台线程都执行完成以后。再结束结束程序,如果存在后台线程没结束,主线程忽略它,直接结束程序。

   举一个不太恰当的例子说明前台线程和后台线程。假设人(前台线程)和机器人(后台线程)去执行一个维修工作。因为发生毒气泄漏必须马上要撤离当前地点。那么只要人(前台线程)都撤离了,就可以关闭了。机器人是否已经撤离不需要关心。

    

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

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值