博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
c#线程学习笔记一---基本概念
阅读量:4951 次
发布时间:2019-06-12

本文共 3167 字,大约阅读时间需要 10 分钟。

参考文章:MSDN:System.Threading命名空间:

             MSDN:Thread类:

             c#温故而知新:线程篇:

             c#多线程学习:

             c#线程手册:

             c#中的线程:

             C#线程、多线程、线程池、后台线程:

----------------------------------------------------------------------------------------------------------------

   学习了解到线程的内容的确是负责繁多,这里只是作为个人学习要点的记录,并参考各位前辈的博文所得

 

Thread的2个构造函数:

  一: 用于带object且无参数的方法的抽象(委托)

  二: 用于无参数且无返回的方法的抽象(委托)

  

 通过在程序前

Using System.Threading;

来获得线程有关成员的命名空间

 

1.声明线程对象的委托类型签名为

void 函数名()void 函数名(object obj参数名)

其中都为无返回值的方法,而带有传入参数的方法,必须为object类型

 

2.声明线程对象的方式

  直接利用函数名声明

Thread 线程对象=new Thread(函数名);

 将函数转化为委托再进行声明

Thread 线程对象=new Thread(new ThreadStart(函数名));//无参数委托声明Thread 线程对象=new Thread(new ParameterizedThreadStart(函数名));//有object参数委托声明

利用匿名方法声明

Thread 线程对象 = new Thread(                    () => {                     /*方法的实现过程*/                    });

 

3.Thread类型和对象的方法浅析  

Thread.Sleep(毫秒);

   Sleep方法会使得当前执行的线程以一定的时间挂起,从而让出资源好方便给其他的线程进行执行,注意Sleep是Thread类型的静态方法,对其的调用只对当前执行的线程起作用

 

Thread对象.Jion();

 Jion方法起到阻塞其他线程的执行,只等待当前调用该方法的线程对象执行完毕后,再允许其他线程继续执行

 

Thread对象.start();Thread对象.start(object参数);

start方法起到开始线程执行的作用,当遇到委托方法是带object的参数时,可以通过该方法来传入参数

 

Thread对象.Abort();

Abort方法起到对调用方法的线程对象的释放和终止,同时引发一个ThreadAbortException异常,

 利用Abort结束线程,在本线程码执行区域,线程对象显示的Thread.CurrentThread.ThreadState为AbortRequest,只有当该段线程退出后,才会显示为Aborted

【注意】1.如果对未启动的线程调用Abort,那么线程一旦启动就会被终止

           2.对已经挂起的线程调用Abort,会导致引发ThreadStateException异常,并将 AbortRequested 添加到被中止的线程的ThreadState 属性中。直到调用 Resume 后,才在挂起的   线程中引发 ThreadAbortException。如果在正在执行非托管代码的托管线程上调用 Abort则直到线程返回到托管代码才引发 ThreadAbortException

 

Thread对象.Interrupt();

Interrupt方法起到对线程对象的挂起作用,同样在调用此方法的线程上引发一个异常:ThreadInterruptedException,和Abort方法不同的是,被挂起的线程可以唤醒,且被挂起时在本线程的执行区域里。该线程的Thread.CurrentThread.ThreadState为为Running。

 

Thread对象.Suspend();//挂起当前线程对象Thread对象.Resume();//恢复当前被挂起的线程

Suspend 是让线程对象挂起,而Resume方法能够恢复当钱被挂起的线程

 

Lock锁的概念及使用

using System;using System.Collections.Generic;using System.Linq;using System.Text;using System.Threading;namespace 线程5{    class Program    {       static object mylock = new object();//声明一个object类型的id        static void Main(string[] args)        {            IList
threads = new List
();//以IList
声明一组线程对象 for (int i = 0; i < 5; i++) { Thread t = new Thread(new ParameterizedThreadStart(myprocess)); threads.Add(t);//将新的线程对象添加到队列 } for(int i=0;i<5;i++) { threads[i].Start(i);//依次执行线程队列中的对象 //threads[i].Join();这里也可以用Jion方法来控制线程的执行 } } static void myprocess(object i) { lock (mylock)//运用lock,锁住固定代码区域,使得只能一次允许一个线程执行该段代码 { Console.WriteLine("线程{0}执行", i.ToString()); Thread.Sleep(1000); } } }}

Lock的作用是使得每次只允许一个线程去访问执行所锁住区域的代码,从而控制线程的执行

 

摘要参考:线程的一些常用属性

1 CurrentThread

   获取到当前线程的对象

2 IsAlive

   判断线程是否处于激活状态

3 IsBackground

   设置该线程是否是后台线程,一旦设置true 的话,该线程就被标示为后台线程

再次强调下后台线程的终止不会导致进程的终止

4 IsThreadPoolThread

    只读属性标示该线程是否属于线程池的托管线程,一般我通过线程池创建的线程该属性都是true

5 Name

    获取到线程的名字,我们可以根据业务或者逻辑来自定义线程的名字

6 Priority

这个属性表示线程的优先级,我们可以用ThreadPriority这个枚举来设置这个属性

ThreadPriority包含有5个优先级大家了解下就行

 

 

 

                   

             

转载于:https://www.cnblogs.com/madkex/archive/2012/06/15/2549177.html

你可能感兴趣的文章
APP网络优化篇
查看>>
算法18-----判断是否存在符合条件的元素【list】
查看>>
《刑法》关于拐卖妇女儿童犯罪的规定
查看>>
Windows的本地时间(LocalTime)、系统时间(SystemTime)、格林威治时间(UTC-Time)、文件时间(FileTime)之间的转换...
查看>>
alias重启后失效了
查看>>
RestTemplate的Object与Entity的区别
查看>>
Fireworks基本使用
查看>>
c#线程学习笔记一---基本概念
查看>>
2018-4-13
查看>>
两台电脑间的消息传输
查看>>
Linux 标准 I/O 库
查看>>
Spring Data JPA教程, 第八部分:Adding Functionality to a Repository (未翻译)
查看>>
教练技术的小应用
查看>>
.net Tuple特性
查看>>
Java基础常见英语词汇
查看>>
iOS并发编程笔记【转】
查看>>
泛型 T的定义<1>
查看>>
thinkphp dispaly和fetch的区别
查看>>
08号团队-团队任务5:项目总结会
查看>>
mybatis 插入数据 在没有commit时 获取主键id
查看>>