C#的多线程机制初探(1)
来源:互联网 发布:python vs nodejs 编辑:程序博客网 时间:2024/05/29 10:11
一.多线程的概念
Windows是一个多任务的
多线程的好处在于可以提高CPU的利用率——任何一个程序员都不希望自己的程序很多时候没事可干,在多线程程序中,一个线程必须等待的时候,CPU可以运行其它的线程而不是等待,这样就大大提高了程序的效率。
然而我们也必须认识到线程本身可能影响系统性能的不利方面,以正确使用线程:
线程也是程序,所以线程需要占用内存,线程越多占用内存也越多
多线程需要协调和管理,所以需要CPU时间跟踪线程
线程之间对共享资源的访问会相互影响,必须解决竞用共享资源的问题
线程太多会导致
基于以上认识,我们可以一个比喻来加深理解。假设有一个
本文将对C#
好了,废话少说,让我们来体验一下多线程的C#吧!
二.操纵一个线程
任何程序在执行时,至少有一个主线程,下面这段小程序可以给读者一个直观的印象:
[CODE]
//SystemThread.cs
using System;
using System.Threading;
namespace ThreadTest
{
class RunIt
{
[STAThread]
static void Main(string[] args)
{
Thread.CurrentThread.Name="System Thread";//给当前线程起名为"System Thread"
Console.WriteLine(Thread.CurrentThread.Name+"'Status:"+Thread.CurrentThread.ThreadState);
Console.ReadLine();
}
}
}
[/CODE]
编译执行后你看到了什么?是的,程序将产生如下输出:
System Thread's Status:Running
在这里,我们通过Thread类的静态属性CurrentThread获取了当前执行的线程,对其Name属性赋值“System Thread”,最后还输出了它的当前状态(ThreadState)。所谓静态属性,就是这个类所有对象所公有的属性,不管你创建了多少个这个类的实例,但是类的静态属性在内存中只有一个。很容易理解CurrentThread为什么是静态的——虽然有多个线程同时存在,但是在某一个时刻,CPU只能执行其中一个。
就像上面程序所演示的,我们通过Thread类来创建和控制线程。注意到程序的头部,我们使用了如下命名空间:
[CODE]
using System;
using System.Threading;
[/CODE]
在.net framework class library中,所有与多线程机制应用相关的类都是放在System.Threading命名空间中的。其中提供Thread类用于创建线程,ThreadPool类用于管理线程池等等,此外还提供解决了线程执行安排,死锁,线程间通讯等实际问题的机制。如果你想在你的应用程序中使用多线程,就必须包含这个类。Thread类有几个至关重要的方法,描述如下:
Start():启动线程
Sleep(int):静态方法,暂停当前线程指定的毫秒数
Abort():通常使用该方法来终止一个线程
Suspend():该方法并不终止未完成的线程,它仅仅挂起线程,以后还可恢复。
Resume():恢复被Suspend()方法挂起的线程的执行
- C#的多线程机制初探(1)
- C#的多线程机制初探(1)
- C#的多线程机制初探
- C#的多线程机制初探
- C#的多线程机制初探
- C#的多线程机制初探
- C#的多线程机制初探(1) _C#教程
- C#的多线程机制初探(1) _C#教程
- C#的多线程机制初探(2)
- C#的多线程机制初探(3)
- C#的多线程机制初探(4)
- C#的多线程机制初探(3)
- C#的多线程机制初探(2)
- C#的多线程机制初探(3)
- C#的多线程机制初探(4)
- C#的多线程机制初探(5)
- C#的多线程机制初探(6)
- C#的多线程机制初探(7)
- VIVI常用命令
- 使用非模态对话框的小技巧
- 追忆那些年老色衰的代码--献给程序员同行,没事看看那些旧代码吧
- 程序员的烦恼--写给展望2008的程序员们
- Thunk 应用
- C#的多线程机制初探(1)
- C#的多线程机制初探(2)
- C#的多线程机制初探(3)
- Welcome to Kision
- C#的多线程机制初探(4)
- Java Web开发技术概述
- Struts培训B组测试题
- 在db2中,如何在sql语句中将yyyymmdd格式的字符串转换为timestamp
- 基于S3C2410平台的Linux 2.6.14内核+平台驱动的移植指南(最终版)