c#多线程thread实例详解
1. Thread线程启动
由于ThreadStart是一个委托,所以可以简化写法
static void Main(string[] args)
{
Console.WriteLine("----------主程序开始,线程ID是{0}-----------------", Thread.CurrentThread.ManagedThreadId); for(int i = 0;i< 5;i++)
{
ThreadStart method = () => TestThread("无参数");
Thread thread = new Thread(method);
thread.Start();
} Console.WriteLine("----------主程序结束,线程ID是{0}-----------------", Thread.CurrentThread.ManagedThreadId); Console.Read();
} static void TestThread(string name)
{
Console.WriteLine("TestThread Start name:{0} 当前线程id:{1} 当前时间:{2}", name, Thread.CurrentThread.ManagedThreadId, DateTime.Now.ToString()); long sum = 0; for (int i = 0; i < 10000000; i++)
{
sum += i;
}
Console.WriteLine("TestThread End name:{0} 当前线程id:{1} 当前时间:{2}", name, Thread.CurrentThread.ManagedThreadId, DateTime.Now.ToString());
}

2. Thread线程传递参数
上面的例子没专递没有参数的,现在开始传递参数
public delegate void ParameterizedThreadStart(object obj);
这个是Thread可以传递参数的方法委托,使用这个委托,可以传递参数。
static void Main(string[] args)
{
Console.WriteLine("----------主程序开始,线程ID是{0}-----------------", Thread.CurrentThread.ManagedThreadId); for(int i = 0;i< 5;i++)
{
ParameterizedThreadStart method = o => TestThread(o.ToString());
Thread thread = new Thread(method);
thread.Start("param" + i);
} Console.WriteLine("----------主程序结束,线程ID是{0}-----------------", Thread.CurrentThread.ManagedThreadId); Console.Read();
} static void TestThread(string name)
{
Console.WriteLine("TestThread Start name:{0} 当前线程id:{1} 当前时间:{2}", name, Thread.CurrentThread.ManagedThreadId, DateTime.Now.ToString()); long sum = 0; for (int i = 0; i < 10000000; i++)
{
sum += i;
}
Console.WriteLine("TestThread End name:{0} 当前线程id:{1} 当前时间:{2}", name, Thread.CurrentThread.ManagedThreadId, DateTime.Now.ToString());
}

3. Thread线程等待
有时候,主线程需要等待子线程执行完后在执行,Thread的线程等待我们使用join()来实现
static void Main(string[] args)
{
Console.WriteLine("----------主程序开始,线程ID是{0}-----------------", Thread.CurrentThread.ManagedThreadId); List<Thread> list = new List<Thread>();
for(int i = 0;i< 5;i++)
{
ParameterizedThreadStart method = o => TestThread(o.ToString());
Thread thread = new Thread(method);
thread.Start("param" + i);
list.Add(thread);
}
foreach (var t in list)
{
t.Join();
}
Console.WriteLine("----------主程序结束,线程ID是{0}-----------------", Thread.CurrentThread.ManagedThreadId); Console.Read();
} static void TestThread(string name)
{
Console.WriteLine("TestThread Start name:{0} 当前线程id:{1} 当前时间:{2}", name, Thread.CurrentThread.ManagedThreadId, DateTime.Now.ToString()); long sum = 0; for (int i = 0; i < 10000000; i++)
{
sum += i;
}
Console.WriteLine("TestThread End name:{0} 当前线程id:{1} 当前时间:{2}", name, Thread.CurrentThread.ManagedThreadId, DateTime.Now.ToString());
}

4. Thread线程获取返回值
Thread没发获取返回值,请注意
5. Thread线程回调
Thread没有回调,我们自定义一个回调
private void ThreadCallBack(ThreadStart method, Action callback)
{
ThreadStart threadStart = () =>
{
method.Invoke();
callback.Invoke();
};
Thread thread = new Thread(threadStart);
thread.Start();
}
c#多线程thread实例详解的更多相关文章
- Java线程创建形式 Thread构造详解 多线程中篇(五)
Thread作为线程的抽象,Thread的实例用于描述线程,对线程的操纵,就是对Thread实例对象的管理与控制. 创建一个线程这个问题,也就转换为如何构造一个正确的Thread对象. 构造方法列表 ...
- (转载)实例详解Android快速开发工具类总结
实例详解Android快速开发工具类总结 作者:LiJinlun 字体:[增加 减小] 类型:转载 时间:2016-01-24我要评论 这篇文章主要介绍了实例详解Android快速开发工具类总结的相关 ...
- 并发编程(四)Thread类详解
一.引言 Thread类中存在着许多操作线程的方法,学习Thread类是非常有必要的,前面我们也嘘唏了创建线程的几种方式,若线程的创建不是以继承Thread类的方式创建的,那我们又改如何使用Threa ...
- 关于async和await的一些误区实例详解
转载自 http://www.jb51.net/article/53399.htm 这篇文章主要介绍了关于async和await的一些误区实例详解,有助于更加深入的理解C#程序设计,需要的朋友可以参考 ...
- 一对一关联查询注解@OneToOne的实例详解
表的关联查询比较复杂,应用的场景很多,本文根据自己的经验解释@OneToOne注解中的属性在项目中的应用.本打算一篇博客把增删改查写在一起,但是在改的时候遇到了一些问题,感觉挺有意思,所以写下第二篇专 ...
- Java基础-进程与线程之Thread类详解
Java基础-进程与线程之Thread类详解 作者:尹正杰 版权声明:原创作品,谢绝转载!否则将追究法律责任. 一.进程与线程的区别 简而言之:一个程序运行后至少有一个进程,一个进程中可以包含多个线程 ...
- Java中JSON字符串与java对象的互换实例详解
这篇文章主要介绍了在java中,JSON字符串与java对象的相互转换实例详解,非常不错,具有参考借鉴价值,需要的朋友可以参考下 在开发过程中,经常需要和别的系统交换数据,数据交换的格式有XML.JS ...
- java.lang.Thread类详解
java.lang.Thread类详解 一.前言 位于java.lang包下的Thread类是非常重要的线程类,它实现了Runnable接口,今天我们来学习一下Thread类,在学习Thread类之前 ...
- thread 类详解
java.lang.Thread类详解 一.前言 位于java.lang包下的Thread类是非常重要的线程类,它实现了Runnable接口,今天我们来学习一下Thread类,在学习Thread类之前 ...
随机推荐
- 自定义 Cordova插件详解
一.Cordova的基础点 在混合式应用中,我们通过现有的Cordova插件,可以轻松的在 H5 上调用手机native的功能.现有的Cordova插件能满足平时大部分的开发需求,然而,有时候找不到合 ...
- JAVA-重载(overload)和重写(overrite)
1.重载发生在同一个类中.有多个方法名相同,但是参数列表不同(包括参数个数和参数类型),和返回值无关,权限修饰符也无关. 2.重写(即覆盖)发生在子类和父类中.子类和父类的方法名.参数列表相同:子类的 ...
- 1.1 Django起步
1.1 Django起步 1.1.1. Django简介 Django开发框架(简称Django)诞生的时间是2003年的金秋时节,美国有两位程序员Adrian Holovaty和Simon ...
- HttpUrlConnection流传输问题(正确传输包含中文的JSON字符串)
目前在写一个功能,主要是使用 HttpURLConnection 发送http请求调用外部接口.本来一切正常的,可是在发送post请求上传数据给服务端时,服务端返回错误信息:获取的JSON请求是乱码的 ...
- 手机上 input submit ios和andirod样式不统一
-webkit-appearance:none;
- spring reference
Spring框架概述 Spring可以轻松创建Java企业应用程序.它提供了在企业环境中使用Java语言所需的一切,支持Groovy和Kotlin作为JVM上的替代语言,并可根据应用程序的需要灵活地创 ...
- recyclerview 主活动里监听点击事件
记性真的不行啊...贴上来有时间多复习复习 主活动 package com.example.com.webtext; import android.content.Intent; import and ...
- liunx定时任务
为当前用户创建cron服务 1. 键入 crontab -e 编辑crontab服务文件 例如 文件内容如下: */2 * * * * /bin/sh /home/admin/jiaoben/bu ...
- MSDN订户下载权限被屏蔽的办法
使用Chrome浏览器,在加载完成页面之后,按F12,在控制台选项卡当中输入下面代码,即可解除屏蔽. $("#SubMigratedMessageArea").remove(); ...
- 输入一个字母,是元音字母,则输出时元音字母*,否则,输出为辅音字母 (元音字母有:a,e,i,o,u)
import java.util.Scanner; public class test4 { public static void main(String[] args) { // TODO Auto ...