Thread介绍(实例化):

Thread类可以创建和控制线程,Thread类的构造函数重载为接受ThreadStart和ParameterizedThreadStart类型的委托参数。微软官网给出的构造函数解释是:

1.Thread(ParameterizedThreadStart):初始化 Thread 类的新实例,指定允许对象在线程启动时传递给线程的委托--------带参数。

2.Thread(ThreadStart):初始化 Thread 类的新实例------不带参数。

在c#中使用可以不予区分,我们只需要实例化即可,c#会自动给我们调用相应构造函数。所以我们不必关系这两个函数。我们简单创建一个例子:

 static void Main(string[] args)
{
Console.WriteLine("主线程开始");
//IsBackground=true,将其设置为后台线程
Thread t = new Thread(Run) { IsBackground = true };
t.Start();
Console.WriteLine("主线程继续执行!");
//主线程结束,后台线程会自动结束,不管有没有执行完成
//Thread.Sleep(300);
Thread.Sleep(1500);
Console.WriteLine("主线程结束");
Console.ReadKey();
}
static void Run()
{
Thread.Sleep(700);
Console.WriteLine("这是后台线程调用");
}

输出结果:
![](http://images2017.cnblogs.com/blog/809005/201709/809005-20170908161143507-591757704.png)
从上面我们可以看出主线程没有等待线程方法执行结束,而是继续执行。
在这里我要补充的一点是如果把上面代码中的休眠去除会导致产生的结果不一样,这个问题是因为线程执行是无序的。

Thread中的属性:

CurrentCulture:获取或设置当前线程的区域性。(这个暂时没研究)
CurrentThread:获取当前正在运行的线程。(即在当前线程内要获取所运行的线程,返回的是当前运行线程,配合其他属性来获取数据)
IsAlive:获取一个值,该值指示当前线程的执行状态。(返回bool类型,如果此线程已启动并且尚未正常终止或中止返回true,否则为false)
IsBackground:下面会特殊说明一下。
ManagedThreadId:获取当前托管线程的唯一标识符。(当前线程的id,返回值为int类型,代表当前线程号,配合CurrentThread使用)
Name:获取或设置线程的名称。(自定义给线程设置一个标识名称,配合CurrentThread使用)
ThreadState:获取一个值,该值包含当前线程的状态。(返回当前线程的状态,枚举类型)
Priority:获取或设置指示线程的调度优先级的值。

# Thread中的前台后台:

在创建Thread中我们可以选中设置为前台线程或者后台线程(默认为前台进程):
IsBackground 属性:
官方解释 :获取或设置一个值,该值指示某个线程是否为后台线程。
自我理解:就是设置一个true或者false,当为true时则表示为后台线程,当为false时为前台线程。
在这里不得不提的是前台线程和后台线程存在的差别,应用程序必须运行完所有的前台线程才可以退出;而对于后台线程,应用程序则可以不考虑其是否已经运行完毕而直接退出,所有的后台线程在应用程序退出时都会自动结束。即当设置为false时即使用户关闭当前主程序,进程不一定关闭,因为线程是寄托在进程上的,前台线程未退出,当前进程就不会终止。(在资源管理器中仍可以看到进程)

Thread中的常用方法:

我们使用Thread创建线程后,我们需要对线程进行控制。

  1、 使用Start()方法使线程处于Running状态,线程开始执行。

  2、 使用Join()方法使线程处于WaitSleepJoin状态,在继续执行标准的 COM 和 SendMessage 消息泵处理期间,阻塞调用线程,直到某个线程终止或经过了指定时 间为止。

  3、 使用Sleep()方法,也会使线程处于WaitSleepJoin状态,在经历Sleep()方法定义的时间段后,线程就会被再次唤醒。、

  4、 使用Abort()方法,会使线程处于ResetAbort()状态,线程在接到这个命令的时候,会抛出一个ThradAbordException类型的异常。

在上面的方法基础上我们修改一下代码来看结果:

        static void Main(string[] args)
{
Console.WriteLine("主线程开始");
//IsBackground=true,将其设置为后台线程
Thread t = new Thread(Run);
t.Start();
Console.WriteLine("newThread State:{0}", t.ThreadState);
Console.WriteLine("主线程继续执行!");
t.Join(100);
Console.WriteLine("newThread State:{0}", t.ThreadState);
//主线程结束,后台线程会自动结束,不管有没有执行完成
t.Abort();
Console.WriteLine("主线程结束");
Console.ReadKey();
}
static void Run()
{
// Thread.Sleep(700);
Console.WriteLine("这是后台线程调用");
}

输出结果:

Thread中数据传递:

上面也说了在c#中线程方法传递数据可以直接调用,下面我们就在上面方法的地方修改一下即可:
t.Start(100):在启动线程的时候把需要的参数传递进去。
static void Run(object nub):方法上面加上参数,这里大家都知道就不多了。
Console.WriteLine("这是传递数据{0}",nub):最后打印一下。
直接上结果结束此文:
![](http://images2017.cnblogs.com/blog/809005/201709/809005-20170908170709804-23414876.png)

【多线程】-Thread的更多相关文章

  1. c#中@标志的作用 C#通过序列化实现深表复制 细说并发编程-TPL 大数据量下DataTable To List效率对比 【转载】C#工具类:实现文件操作File的工具类 异步多线程 Async .net 多线程 Thread ThreadPool Task .Net 反射学习

    c#中@标志的作用   参考微软官方文档-特殊字符@,地址 https://docs.microsoft.com/zh-cn/dotnet/csharp/language-reference/toke ...

  2. 2.匿名类,匿名类对象,private/protected/public关键字、abstract抽象类,抽象方法、final关键字的使用,多线程Thread类start方法原理

    package com.bawei.multithread; //注意:模板方法我们通常使用抽象类或者抽象方法!这里我们为了方便在本类中使用就没有使用抽象类/抽象方法 public class Tem ...

  3. 多线程-Thread和ThreadPool

    多线程原理 多线程都是基于委托的. 多线程优缺点 缺点: 1.导致程序复杂,开发调试维护困难,特别是线程交互. 2.线程过多导致服务器卡死,因为占用CPU 内存等资源. 优点: 1.良好的交互,特别对 ...

  4. Java多线程Thread

    转自:http://www.cnblogs.com/lwbqqyumidi/p/3804883.html Java总结篇系列:Java多线程(一)   多线程作为Java中很重要的一个知识点,在此还是 ...

  5. java 多线程--- Thread Runnable Executors

    java 实现多线程的整理: Thread实现多线程的两种方式: (1)继承 Thread类,同时重载 run 方法: class PrimeThread extends Thread { long ...

  6. python进阶学习笔记(四)--多线程thread

    在使用多线程之前,我们首页要理解什么是进程和线程. 什么是进程? 计算机程序只不过是磁盘中可执行的,二进制(或其它类型)的数据.它们只有在被读取到内存中,被操作系统调用的时候才开始它们的生命期.进程( ...

  7. php多线程thread开发与应用的例子

    Php多线程的使用,首先需要PHP5.3以上版本,并安装pthreads PHP扩展,可以使PHP真正的支持多线程,扩展如何安装请自行百度 PHP扩展下载:https://github.com/kra ...

  8. 多线程(Thread),其实很简单!

    目录:  1:线程简介 2:怎么操作线程      3:Thread的常用方法 4:简单的获奖机     5:应用程序域   线程:是Windows任务调度的最小单位.线程是程序中的一个执行流,每个线 ...

  9. 【C#多线程】C#多线程 Thread 开发基础

    引用 using System; using System.Threading; 多线程代码 Thread mainthread = new Thread(ExecuteThread); mainth ...

  10. android 多线程Thread,Runnable,Handler,AsyncTask

    先看两个链接: 1.http://www.2cto.com/kf/201404/290494.html 2. 链接1: android 的多线程实际上就是java的多线程.android的UI线程又称 ...

随机推荐

  1. 小强的HTML5移动开发之路(1)——HTML介绍

    来自:http://blog.csdn.net/dawanganban/article/details/17591373 HTML是HyperText Markup Language(超文本标记语言) ...

  2. 第三方Charts绘制图表四种形式:饼状图,雷达图,柱状图,直线图

    对于第三方框架Charts(Swift版本,在OC项目中需要添加桥接头文件),首先要解决在项目中集成的问题,集成步骤: 一.下载Charts框架 下载地址:https://github.com/dan ...

  3. Unity UGUI实现图文混排

    目前在unity实现图文混排的好像都是通过自定义字体然后在文本获取字符的位置,用图片替换掉图片标签,这样对于支持英文来说,并没有什么影响.然后对于中文来说就是一个相当麻烦的事了,毕竟图文混排多用于游戏 ...

  4. linux知识汇总

    1.     利用Ctrl+Alt+F1到Ctrl+Alt+F6在6个虚拟控制台之间切换,利用Ctrl+Alt+F7切换回图形界面. 2.     使用who命令来判断谁在系统上及其登录方式.id命令 ...

  5. 图形绘制中的PorterDuffXfermode

    1.概述 在android图形渲染中 会使用到图像混合模式 <span style="font-size:18px;">setXfermode(Xfermode xfe ...

  6. 1.Linux下libevent和memcached安装

     1 下载libevent-2.0.22-stable.tar.gz,下载地址是:http://libevent.org/ 2 下载memcached,下载地址是:http://memcached ...

  7. android 面试之listview

    ListView优化一直是一个老生常谈的问题,不管是面试还是平常的开发中,ListView永远不会被忽略掉,那么这篇文章我们来看看如何最大化的优化ListView的性能.· 1.在adapter中的g ...

  8. 怎样写一个与Win8 IE11兼容的标准BHO?

    怎样写一个与Win8 IE11兼容的标准BHO? 环境:Windows8.1 x86 IE11(其它环境未讨论) 作者:magictong 日期:2014/02/02 概述 微软在2013年6月份推出 ...

  9. 集团公司(嵌入ETL工具)财务报表系统解决方案

    集团公司(嵌入ETL工具)财务报表系统解决方案 一.项目背景: 某集团公司是一家拥有100多家子公司的大型集团公司,旗下子公司涉及各行各业,包括:金矿.铜矿.房产.化纤等.由于子公司在业务上的差异,子 ...

  10. STL算法设计理念 - 函数对象和函数对象当参数和返回值

    函数对象: 重载函数调用操作符的类,其对象常称为函数对象(function object),即它们是行为类似函数的对象.一个类对象,表现出一个函数的特征,就是通过"对象名+(参数列表)&qu ...