使用Thread类可以创建和控制线程
1.创建线程
- 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);
- }
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构造函数,给线程传送数据
- 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;
- }
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;
}
方法二:创建一个定制类,把线程的方法定义为实例方法,给线程传送数据
- //定制类
- 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();
- }
- }
//定制类
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类可以创建和控制线程的更多相关文章
- python 多线程编程之threading模块(Thread类)创建线程的三种方法
摘录 python核心编程 上节介绍的thread模块,是不支持守护线程的.当主线程退出的时候,所有的子线程都将终止,不管他们是否仍在工作. 本节开始,我们开始介绍python的另外多线程模块thre ...
- 多线程----Thread类,Runnable接口,线程池,Callable接口,线程安全
1概念 1.1进程 进程指正在运行的程序.确切的来说,当一个程序进入内存运行,即变成一个进程,进程是处于运行过程中的程序,并且具有一定独立功能. 任务管理器中: 1.2线程 线程是进程中的一个执行单元 ...
- Thread类的常用方法_获取线程名称的方法和设置线程名称的方法
Thread类的常用方法 获取线程的名称: 1.使用Thread类中的方法getName() String getName() 返回该线程的名称 2.可以先获取到当前正在执行的线程,使用线程中的方法g ...
- Thread类的常用方法_获取线程名称的方法和Thread类的常用方法_设置线程名称的方法
构造方法: public Thread();分配一个新的线程对象 public Thread(String name);分配一个指定名字的新的线程对象 public Thread(Runnable t ...
- java基础知识回顾之java Thread类学习(十)--线程的状态以及转化使用的方法介绍
线程的概述: 线程是程序的多个执行路径,执行调度的单位,依托于进程存在.线程不仅可以共享进程的内存,而且还拥有一个属于自己的内存空间,这段内存空间叫做线程栈,是建立线程的时候由系 ...
- 通过继承Thread类来创建多线程 关键词 start
// 代码 public class MyThread extends Thread { public void run(){ for(int i=0;i<10;i++){ try { Thre ...
- [深入学习C#]C#实现多线程的方法:线程(Thread类)和线程池(ThreadPool)
简介 使用线程的主要原因:应用程序中一些操作需要消耗一定的时间,比如对文件.数据库.网络的访问等等,而我们不希望用户一直等待到操作结束,而是在此同时可以进行一些其他的操作. 这就可以使用线程来实现. ...
- C#实现多线程的方法:线程(Thread类)和线程池(ThreadPool)
简介 使用线程的主要原因:应用程序中一些操作需要消耗一定的时间,比如对文件.数据库.网络的访问等等,而我们不希望用户一直等待到操作结束,而是在此同时可以进行一些其他的操作. 这就可以使用线程来实现. ...
- C# 多线程之Thread类
使用System.Threading.Thread类可以创建和控制线程. 常用的构造函数有: // 摘要: // 初始化 System.Threading.Thread 类的新实例,指定允许对象在 ...
随机推荐
- 事件委托(event delegation)
事件委托给我带来的第一印象是,如果可以的话请尝试得经常使用它,性能好! 通过字符串拼接后,并进行DOM插入,不会复制事件,此时需要进行事件委托了!!! 优点 事件委托对于web应用程序的性能有如下几个 ...
- 第三百三十九天 how can I 坚持
脑子里老是无缘无故浮现出之前学的古文,之前只是傻学了,什么都没搞懂啊. 吾师道也,夫庸知其年之先后生于吾乎?是故无贵无贱,无长无少,道之所存,师之所存也. 是故弟子不必不如师,师不必贤于弟子,闻道有先 ...
- 第二百二十四天 how can I 坚持
实物商品兑换,有点小难搞,其实也没什么难的,也就那些东西,不过好像这就是我设计实现的,干起来挺来劲的. 供暖了,挺暖和的,哈哈. 小米耳机(炫彩版)到了.感觉挺好的. 还在纠结到底要买哪种颜色的羽绒服 ...
- MYSQL数据库重点:流程控制语句
1.BEGIN ... END复合语句:包含多个语句.statement_list 代表一个或多个语句的列表.statement_list之内每个语句都必须用分号(:)来结尾. [begin_labe ...
- HDU 5857 Median (推导)
Median 题目链接: http://acm.split.hdu.edu.cn/showproblem.php?pid=5857 Description There is a sorted sequ ...
- netdata linux环境下的安装
据说netdata监控很个性化,采用的显示方式也很漂亮,就来尝试安装.百度搜索到的安装教程的斑斑是1.0.顺藤摸瓜去wiki看了看,已经更新为1.4了,果断走起: 下载地址::https://gith ...
- android进度条的使用
// 导入按钮事件 btnsearch.setOnClickListener(new View.OnClickListener() { @Override public void on ...
- 解决CSS各种IE各种兼容问题(Google解决方案)
google的 ie7 – js中是一个JavaScript库(解决IE与W3C标准的冲突的JS库),使微软的Internet Explorer的行为像一个Web标准兼容的浏览器,支持更多的W3C标准 ...
- android 解释dp,px,pt,sp单位
1.dp(dip):不同设备有不同的显示效果,这个和设备硬件有关系,一般我们为了支持WVGA,HVGA和QVGA对剑使用这个,它是不依赖像素的 2.px:pixels(像素),不同设备显示效果相同,一 ...
- Proxy代理(AOP实现原理)
AOP基于动态代理实现:返回代理对象 java.lang.reflect 包Proxy 类,构造代理类.newProxyInstance() 就是创建代理对象的方法. Proxy.newProxyIn ...