多线程(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 ...
随机推荐
- ubuntu16.04开机时的.local问题
开机时显示:您的当前网络有.local域,我们不建议这样做而且这与AVAHI网络服务探测不兼容,该服务已被禁用 解决方法: 在终端输入:sudo gedit /etc/default/avahi-da ...
- 体验一把做黑客的感觉-IPC$入侵之远程控制
前言 一看你就是看标题进来的,我可不是标题党啊,大家往下看吧,本文章主要介绍了利用IPC共享漏洞上传并执行木马. 基础知识 一.什么是IPC 进程间通信(IPC,Inter-Process Commu ...
- [Swift]LeetCode291. 单词模式 II $ Word Pattern II
Given a pattern and a string str, find if strfollows the same pattern. Here follow means a full matc ...
- [Swift]LeetCode833. 字符串中的查找与替换 | Find And Replace in String
To some string S, we will perform some replacement operations that replace groups of letters with ne ...
- less环境的安装与搭建
less: Less 是一门 CSS 预处理语言,它扩充了 CSS 语言,增加了诸如变量.混合(mixin).函数等功能,让 CSS 更易维护.方便制作主题.扩充.Less 可以运行在 Node 或浏 ...
- 执行find / -name *.sh时报错 find: 路径必须在表达式之前: start-ressvr-release.sh
想查找一个包含4000多文件的目录下所有.sh结尾的文件 使用命令 find ./ -name *.sh (本身已经在要查找的目录里了) 结果报错: 解决方法一:find ./ - ...
- Python档案袋(文件系列操作 )
文件读写基础 简单的读文件: # r 表示只能读 #打开文件,得到文件光标对象,文件不存在则报错 f=open("ww.txt","r",encoding=&q ...
- 一串数字中,只有一个数字出现一次,其他数字都出现两次,查找出这个数字(python)(原创)
背景: 电话面试&手撕代码 2019.03.22 Mufasa 问题: 一串数字中,只有一个数字出现一次,其他数字都出现两次,查找出这个数字 条件: 这串数字是有序数 解决方法: 核心代码只有 ...
- BBS论坛(四)
4.1.cms登录页面csrf保护 (1)Perfect_bbs.py from flask_wtf import CSRFProtect CSRFProtect(app) 添加csrf保护后,现在再 ...
- 【从零开始自制CPU之学习篇03】锁存器与触发器
本篇学习了两种锁存器:SR Latch和D Latch,一种触发器:D flip flop SR Latch:SR—锁存器 初始状态下,S和R都为0,Q和Q‘随机有一个为1另一个 为0(取决于电流速度 ...