1.创建线程

  1. static void Main(string[] args)
  2. {
  3. /* Thread类
  4. * 创建控制线程
  5. * 其构造函数接受ThreadStart和ParameterizedThreadStart类型的委托参数
  6. */
  7. Thread t1 = new Thread(ThreadMain);
  8. t1.Name = "66";
  9. //创建了线程后,可以用Start()方法启动线程啦^-^
  10. t1.Start();
  11. Console.WriteLine("主线程");
  12. /* 使用λ表达式创建线程更简洁 */
  13. Thread t2 = new Thread(() => Console.WriteLine("t2线程"));
  14. t2.Start();
  15. //这个就更简洁 ≡(▔﹏▔)≡
  16. new Thread(() => Console.WriteLine("t3线程")).Start();
  17. Console.ReadLine();
  18. /* 得到结果不能保证哪个结果先输出
  19. * 线程由操作系统调度,每次哪个线程在前不同的
  20. */
  21. }
  22. //线程中通过委托ThreadStart调用的方法
  23. static void ThreadMain()
  24. {
  25. Console.WriteLine("t1线程,线程名:" + Thread.CurrentThread.Name + ",该线程托管ID:" + Thread.CurrentThread.ManagedThreadId);
  26. }

static void Main(string[] args)
{
/* Thread类
* 创建控制线程
* 其构造函数接受ThreadStart和ParameterizedThreadStart类型的委托参数
*/
Thread t1 = new Thread(ThreadMain);
t1.Name = "66";
//创建了线程后,可以用Start()方法启动线程啦^-^
t1.Start();

Console.WriteLine("主线程");

/* 使用λ表达式创建线程更简洁 */
Thread t2 = new Thread(() => Console.WriteLine("t2线程"));
t2.Start();

//这个就更简洁 ≡(▔﹏▔)≡
new Thread(() => Console.WriteLine("t3线程")).Start();

Console.ReadLine();

/* 得到结果不能保证哪个结果先输出
* 线程由操作系统调度,每次哪个线程在前不同的
*/
}

//线程中通过委托ThreadStart调用的方法
static void ThreadMain()
{
Console.WriteLine("t1线程,线程名:" + Thread.CurrentThread.Name + ",该线程托管ID:" + Thread.CurrentThread.ManagedThreadId);
}

2.给线程传送数据

方法一:使用带ParameterizedThreadStart委托参数的Thread构造函数,给线程传送数据

  1. class Program
  2. {
  3. static void Main(string[] args)
  4. {
  5. /* 使用带ParameterizedThreadStart委托参数的Thread构造函数,给线程传送数据 */
  6. //初始化给线程传送的数据
  7. Data d = new Data();
  8. d.Message = "66";
  9. Thread t1 = new Thread(ThreadMainWithParameters);
  10. //使用了ParameterizedThreadStart委托,线程入口必有一object类型参数
  11. t1.Start(d);
  12. Console.ReadLine();
  13. }
  14. //线程中通过委托ParameterizedThreadStart调用的方法
  15. static void ThreadMainWithParameters(object o)
  16. {
  17. Data d = (Data)o;
  18. Console.WriteLine("线程t1,传入参数:" + d.Message);
  19. }
  20. }
  21. //给线程传送数据,需要某个存储数据的类或结构
  22. public struct Data
  23. {
  24. public string Message;
  25. }

class Program
{
static void Main(string[] args)
{
/* 使用带ParameterizedThreadStart委托参数的Thread构造函数,给线程传送数据 */

//初始化给线程传送的数据
Data d = new Data();
d.Message = "66";

Thread t1 = new Thread(ThreadMainWithParameters);
//使用了ParameterizedThreadStart委托,线程入口必有一object类型参数
t1.Start(d);

Console.ReadLine();
}

//线程中通过委托ParameterizedThreadStart调用的方法
static void ThreadMainWithParameters(object o)
{
Data d = (Data)o;
Console.WriteLine("线程t1,传入参数:" + d.Message);
}
}

//给线程传送数据,需要某个存储数据的类或结构
public struct Data
{
public string Message;
}

方法二:创建一个定制类,把线程的方法定义为实例方法,给线程传送数据

  1. //定制类
  2. public class MyThread
  3. {
  4. private string data;
  5. public MyThread(string data)
  6. {
  7. this.data = data;
  8. }
  9. //线程中通过委托ThreadStart调用的定制类中的实例方法
  10. public void ThreadMain()
  11. {
  12. Console.WriteLine("线程t1,传入参数:" + data);
  13. }
  14. }
  15. class Program
  16. {
  17. static void Main(string[] args)
  18. {
  19. /* 创建一个定制类,把线程的方法定义为实例方法,给线程传送数据 */
  20. MyThread obj = new MyThread("66");
  21. Thread t1 = new Thread(obj.ThreadMain);
  22. t1.Start();
  23. Console.ReadLine();
  24. }
  25. }

//定制类
public class MyThread
{
private string data;

public MyThread(string data)
{
this.data = data;
}

//线程中通过委托ThreadStart调用的定制类中的实例方法
public void ThreadMain()
{
Console.WriteLine("线程t1,传入参数:" + data);
}
}

class Program
{
static void Main(string[] args)
{
/* 创建一个定制类,把线程的方法定义为实例方法,给线程传送数据 */

MyThread obj = new MyThread("66");

Thread t1 = new Thread(obj.ThreadMain);
t1.Start();

Console.ReadLine();
}
}

使用Thread类可以创建和控制线程的更多相关文章

  1. python 多线程编程之threading模块(Thread类)创建线程的三种方法

    摘录 python核心编程 上节介绍的thread模块,是不支持守护线程的.当主线程退出的时候,所有的子线程都将终止,不管他们是否仍在工作. 本节开始,我们开始介绍python的另外多线程模块thre ...

  2. 多线程----Thread类,Runnable接口,线程池,Callable接口,线程安全

    1概念 1.1进程 进程指正在运行的程序.确切的来说,当一个程序进入内存运行,即变成一个进程,进程是处于运行过程中的程序,并且具有一定独立功能. 任务管理器中: 1.2线程 线程是进程中的一个执行单元 ...

  3. Thread类的常用方法_获取线程名称的方法和设置线程名称的方法

    Thread类的常用方法 获取线程的名称: 1.使用Thread类中的方法getName() String getName() 返回该线程的名称 2.可以先获取到当前正在执行的线程,使用线程中的方法g ...

  4. Thread类的常用方法_获取线程名称的方法和Thread类的常用方法_设置线程名称的方法

    构造方法: public Thread();分配一个新的线程对象 public Thread(String name);分配一个指定名字的新的线程对象 public Thread(Runnable t ...

  5. java基础知识回顾之java Thread类学习(十)--线程的状态以及转化使用的方法介绍

       线程的概述:         线程是程序的多个执行路径,执行调度的单位,依托于进程存在.线程不仅可以共享进程的内存,而且还拥有一个属于自己的内存空间,这段内存空间叫做线程栈,是建立线程的时候由系 ...

  6. 通过继承Thread类来创建多线程 关键词 start

    // 代码 public class MyThread extends Thread { public void run(){ for(int i=0;i<10;i++){ try { Thre ...

  7. [深入学习C#]C#实现多线程的方法:线程(Thread类)和线程池(ThreadPool)

    简介 使用线程的主要原因:应用程序中一些操作需要消耗一定的时间,比如对文件.数据库.网络的访问等等,而我们不希望用户一直等待到操作结束,而是在此同时可以进行一些其他的操作.  这就可以使用线程来实现. ...

  8. C#实现多线程的方法:线程(Thread类)和线程池(ThreadPool)

    简介 使用线程的主要原因:应用程序中一些操作需要消耗一定的时间,比如对文件.数据库.网络的访问等等,而我们不希望用户一直等待到操作结束,而是在此同时可以进行一些其他的操作.  这就可以使用线程来实现. ...

  9. C# 多线程之Thread类

    使用System.Threading.Thread类可以创建和控制线程. 常用的构造函数有:   // 摘要: // 初始化 System.Threading.Thread 类的新实例,指定允许对象在 ...

随机推荐

  1. 【360开源】thinkjs:基于Promise的Node.js MVC框架 (转)

    thinkjs是360奇舞团开源的一款Node.js MVC框架,该框架底层基于Promise来实现,很好的解决了Node.js里异步回调的问题.360奇舞团(奇虎75Team),是奇虎360公司We ...

  2. 【转】 ASP.NET网站路径中~(波浪线)解释

    刚开始学习ASP.NET的朋友可能会不理解路径中的-符代表什么,例如ImageUrl=”~/Images/SampleImage.jpg” 现在我们看看-代表什么意思.-是ASP.NET 的Web 应 ...

  3. ubuntu 彻底删除软件包

    找到此软件名称,然后sudo apt-get purge ......(点点为为程序名称),purge参数为彻底删除文件,然后sudo apt-get autoremove,sudo apt-get ...

  4. GLSL Notes

    [GLSL Notes] API of shader: glCreateShader(), glShaderSource(), glCompileShader(), glGetShadrInfoLog ...

  5. Windows 7 不同安装模式简要区别(图解)

    ★ 你可能对GHOST不支持AHCI感到迷惑,实际上,写过GHOST一键安装批处理的都知道一个叫FINDCD.EXE的小程序,可是这个程序老 了,AHCI模式光驱他找不到了,找不到光驱动意味着光盘中G ...

  6. sql server对并发的处理-乐观锁和悲观锁【粘】

    假如两个线程同时修改数据库同一条记录,就会导致后一条记录覆盖前一条,从而引发一些问题. 例如: 一个售票系统有一个余票数,客户端每调用一次出票方法,余票数就减一. 情景: 总共300张票,假设两个售票 ...

  7. ASP.NET MVC- 视图

    关于视图的一些一些一些 一.Action指定使用视图 public ActionResult Add(string txtName, string txtContent) { return View( ...

  8. SNMP MIB中的含read-create节点的表的实现

    做过snmp/mib开发的知道,常见的节点类型一般只有no-accessible,read-only,read-write三种访问类型.snmp V2中引入了一种新的访问类型:read-create. ...

  9. WPF的DataGrid绑定ItemsSource后第一次加载数据有个别列移位的解决办法

    最近用WPF的DataGrid的时候,发现一个很弱智的问题,DataGrid的ItemsSource是绑定了一个属性: 然后取数给这个集合赋值的时候,第一次赋值,就会出现列移位 起初还以为是显卡的问题 ...

  10. 关于App.config配置文件

    今天在做复习的时候,突然发现自己无法读取配置文件中的数据库连接字符串,而且检查了半天也没找出原因,最后求助万能的度娘才得以解决—— 1.App.config配置文件在项目中添加后不要修改名称,否则会出 ...