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. Linux Shell 命令--cut

    解读-help 用法:cut [选项]... [文件]... 从每个文件中输出指定部分到标准输出. 长选项必须使用的参数对于短选项时也是必需使用的.   -b, --bytes=列表          ...

  2. (NO.00001)iOS游戏SpeedBoy Lite成形记(十)

    上篇最后遇到是神马问题呢? 原来由于现在seq动作的时间变得不确定了,jump的持续时间不能对应发生变化,导致可能选手在比赛后边就没有跳跃动作了!这虽不影响整个代码逻辑,却多少有些让玩家不爽. 一种解 ...

  3. 《java入门第一季》之面向对象面试题(fianl关键字)

    /* 面试题:final修饰局部变量的问题 基本类型:基本类型的值不能发生改变. 引用类型:引用类型的(地址值)(不能发生改变),但是,该对象的堆内存的值是可以改变的. */ class Studen ...

  4. VS2008中开发手持终端程序(PDA软件)总结

    VS2008中开发手持终端程序(PDA手机软件)的项目总结 1程序结构 程序中包括四个部分: 1.系统配置 这个部分用来配置系统中的相关参数,参数包括数据库信息和串口的配置信息.这部分的主要技术是XM ...

  5. 【嵌入式开发】C语言 结构体相关 的 函数 指针 数组

    . 作者 : 万境绝尘 转载请注明出处 : http://www.hanshuliang.com/?post=30 . 结构体概述 : 结构体是 多个 变量的集合, 变量的类型可以不同; -- 可进行 ...

  6. spring揭秘 读书笔记 一 IoC初探

    本文是王福强所著<<spring揭秘>>一书的读书笔记 ioc的基本概念 一个例子 我们看下面这个类,getAndPersistNews方法干了四件事 1 通过newsList ...

  7. LeetCode之“散列表”:Isomorphic Strings

    题目链接 题目要求: Given two strings s and t, determine if they are isomorphic. Two strings are isomorphic i ...

  8. linux下用gtk+写比赛赌博GUI小游戏

    游戏界面全部由gtk的GUI完成,没有使用openGL之类的高端货. 游戏玩法就是8位选手比赛跑步,你可以在赛前赌哪位选手会赢,如果输了cash会被扣除,反之cash会增加. 无聊写了3个选项:小数时 ...

  9. 用C语言绘制一条标准的余弦曲线

    #include<stdio.h> #include<math.h> int main() { double y; int x,m; for(y=1;y>=-1;y-=0 ...

  10. Mybatis中文查询没有结果

    我用中文参数去查找数据,没有返回结果,应该是乱码问题 进行如下配置问题消失:jdbc:mysql://localhost:3306/appstore_db?useUnicode=true&ch ...