多线程(2)Thread
我们先从最基础的Thread说起。
创建并启动线程
创建并启动一个线程,如下代码:

namespace ConsoleApplication17
{
class Program
{
static void Main(string[] args)
{
var thread = new Thread(PrintNumbers);
thread.Start(); Console.WriteLine("Thread Start...");
Console.ReadKey();
} /// <summary>
/// 匹配委托的方法
/// </summary>
public static void PrintNumbers()
{
Console.WriteLine("Starting......");
for (int i = ; i < ; i++)
{
Console.WriteLine(i);
}
}
}
}
运行结果:

暂停线程
假如需要暂停当前线程,可以调用Thread.Sleep方法,使当前线程处于阻塞状态,如下代码:

namespace ConsoleApplication17
{
class Program
{
static void Main(string[] args)
{
var thread = new Thread(PrintNumbersWithDelay);
thread.Start(); Console.WriteLine("Thread Start...");
Console.ReadKey();
} /// <summary>
///
/// </summary>
public static void PrintNumbersWithDelay()
{
Console.WriteLine("Starting......");
for (int i = ; i < ; i++)
{
Thread.Sleep(TimeSpan.FromMilliseconds());
Console.WriteLine(string.Format("{0} {1}", DateTime.Now.ToString("yyyy-MM-dd HH:mm:ss"), i));
}
}
}
}
输出结果:

合并线程
如果需要等待某个子线程执行行,主线程才继续执行时,可以使用Thread.Join方法来实现,如下代码:

namespace ConsoleApplication17
{
class Program
{
static void Main(string[] args)
{
//Thread
var thread = new Thread(PrintNumbersWithDelay);
thread.Start();
thread.Join(); Console.WriteLine("Thread Completed!");
Console.ReadKey();
} /// <summary>
///
/// </summary>
public static void PrintNumbersWithDelay()
{
Console.WriteLine("Starting......");
for (int i = ; i < ; i++)
{
Thread.Sleep(TimeSpan.FromMilliseconds());//线程阻塞1s,此时线程状态为WaitSleepJoin
Console.WriteLine(string.Format("当前时间:{0},线程状态:{1},结果:{2}", DateTime.Now.ToString("yyyy-MM-dd HH:mm:ss"),Thread.CurrentThread.ThreadState, i));
}
}
}
}
输出结果:

终止线程
如果在子线程运行过程中强制终止它,可以调用Thread.Abort方法,这会给当前子线程触发ThreadAbortException异常,导致线程被终止!
如下代码:

namespace ConsoleApplication17
{
class Program
{
static void Main(string[] args)
{
Console.WriteLine("Starting Program...");
var thread = new Thread(PrintNumbersWithDelay);
thread.Start(); Thread.Sleep(TimeSpan.FromMilliseconds());
thread.Abort(); Console.WriteLine("Thread has been abort!");
Console.ReadKey();
} /// <summary>
///
/// </summary>
public static void PrintNumbersWithDelay()
{
Console.WriteLine("Starting......");
for (int i = ; i < ; i++)
{
Thread.Sleep(TimeSpan.FromMilliseconds());
Console.WriteLine(string.Format("当前时间:{0},线程状态:{1},结果:{2}", DateTime.Now.ToString("yyyy-MM-dd HH:mm:ss"), Thread.CurrentThread.ThreadState, i));
}
}
}
}
线程传递参数
通过分析可以发现,Thread接受的实际上是一个委托,包括无参数的委托和接受一个Object类型的委托,


如下代码:

namespace ConsoleApplication17
{
class Program
{
static void Main(string[] args)
{
Console.WriteLine("Main thread starting...");
var thread = new Thread(PrintNumbersWithCount);
thread.Start();
thread.Join(); Console.WriteLine("Main thread completed!");
Console.ReadKey();
} /// <summary>
/// 匹配委托方法,带参数
/// </summary>
public static void PrintNumbersWithCount(object obj)
{
Console.WriteLine("Sub thread starting...");
var number = Convert.ToInt32(obj);
for (int i = ; i < number; i++)
{
Console.WriteLine(string.Format("当前时间:{0},线程状态:{1},结果:{2}", DateTime.Now.ToString("yyyy-MM-dd HH:mm:ss"), Thread.CurrentThread.ThreadState, i));
}
}
}
}
输出结果:

多线程(2)Thread的更多相关文章
- Unity多线程(Thread)和主线程(MainThread)交互使用类——Loom工具分享
		Unity多线程(Thread)和主线程(MainThread)交互使用类——Loom工具分享 By D.S.Qiu 尊重他人的劳动,支持原创,转载请注明出处:http.dsqiu.iteye.com ... 
- (转)多线程——继承Thread 类和实现Runnable 接口的区别
		java中我们想要实现多线程常用的有两种方法,继承Thread 类和实现Runnable 接口,有经验的程序员都会选择实现Runnable接口 ,其主要原因有以下两点: 首先,java只能单继承,因此 ... 
- NET 异步多线程,THREAD,THREADPOOL,TASK,PARALLEL
		.NET 异步多线程,THREAD,THREADPOOL,TASK,PARALLEL,异常处理,线程取消 今天记录一下异步多线程的进阶历史,以及简单的使用方法 主要还是以Task,Parallel为主 ... 
- Perl6多线程1 Thread : new / run
		先看一个小例子: ) { #默认参数 say $name; } sub B(:name($name)) { #默认参数为 any say $name; } A(); A(); B(); B(name ... 
- 多线程:Thread类的Join()方法
		多线程:Thread类的Join()方法 http://blog.163.com/hc_ranxu/blog/static/3672318220095284513678/ 当我们在线程B中调用Thre ... 
- 【Android多线程】Thread和线程池
		https://www.bilibili.com/video/av65170691?p=3 (本文为此视频听课笔记) 一.为什么要使用多线程 二.Thread 2.1 通过继承Thread类 2.2 ... 
- C#异步和多线程以及Thread、ThreadPool、Task区别和使用方法
		本文的目的是为了让大家了解什么是异步?什么是多线程?如何实现多线程?对于当前C#当中三种实现多线程的方法如何实现和使用?什么情景下选用哪一技术更好? 第一部分主要介绍在C#中异步(async/awai ... 
- ios基础篇(二十九)—— 多线程(Thread、Cocoa operations和GCD)
		一.进程与线程 1.进程 进程是指在系统中正在运行的一个应用程序,每个进程之间是独立的,每个进程均运行在其专用且受保护的内存空间内: 如果我们把CPU比作一个工厂,那么进程就好比工厂的车间,一个工厂有 ... 
- Java 多线程(1)-Thread和Runnable
		一提到Java多线程,首先想到的是Thread继承和Runnable的接口实现 Thread继承 public class MyThread extends Thread { public void ... 
- C++实现多线程类Thread
		Windows编程中创建线程的常见函数有:CreateThread._beginthread._beginthreadex.据说在任何情况下_beginthreadex都是较好的选择. _begint ... 
随机推荐
- 排列组合python
			python 的 itertools模块 可以专业的处理的排列组合问题 写在自己博客里,怕下次找不到喽 
- 详解AMD规范及具体实现requireJS在工程中的使用
			前面的话 由CommonJS组织提出了许多新的JavaScript架构方案和标准,希望能为前端开发提供统一的指引.AMD规范就是其中比较著名一个,全称是Asynchronous Module Defi ... 
- [Swift]LeetCode41. 缺失的第一个正数 | First Missing Positive
			Given an unsorted integer array, find the smallest missing positive integer. Example 1: Input: [1,2, ... 
- Mysql的两种“排名第几且有可能为空的记录”写法(力扣176)
			编写一个 SQL 查询,获取 Employee 表中第二高的薪水(Salary) . +----+--------+ | Id | Salary | +----+--------+ | 1 | 100 ... 
- Linux 中改变主机名的 4 种方法
			今天,我们将向你展示使用不同的方法来修改主机名.你可以从中选取最适合你的方法. 使用 systemd 的系统自带一个名为 hostnamectl 的好用工具,它可以使我们能够轻易地管理系统的主机名. ... 
- ios 自动化构建 code-select: error: tool 'xcodebuild' requires Xcode, but active developer directory.....
			问题描述: Pod installation complete! There are 2 dependencies from the Podfile and 3 total pods installe ... 
- WebSocket(5)---多人聊天系统
			多人聊天系统 功能说明:多人聊天系统,主要功能点: 1.当你登陆成功后,可以看到所有在线用户(实际开发可以通过redis实现,我这边仅仅用map集合) 2.实现群聊功能,我发送消息,大家都可以看到. ... 
- 利用Grafana展示zabbix数据
			一.系统搭建(以Centos7为例)因为我们的主要目的是展示zabbix的数据,所以建议大家直接在zabbix的服务器上搭建这个系统,亲测两系统无冲突,这样部署的好处是两系统间的数据传输更快,前端展示 ... 
- Kafka从入门到进阶
			1. Apache Kafka是一个分布式流平台 1.1 流平台有三个关键功能: 发布和订阅流记录,类似于一个消息队列或企业消息系统 以一种容错的持久方式存储记录流 在流记录生成的时候就处理它们 ... 
- solr之环境配置三
			配置安装Solr到Tomcat 1. 解压 solr4.7.2.zip 2. 将 solr-4.7.2\dist\solr-4.7.2.war拷贝到 apache-tomcat-7.0.55\weba ... 
