多线程(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 ...
随机推荐
- 浏览器css隐藏滚动条的方法!除了IE一般都支持
::-webkit-scrollbar { /* 滚动条整体部分 */ width:0px; margin-right:2px}::-webkit-scrollbar-track-piece { /* ...
- COOKIE和Session的原理及异同
COOKIE和Session的原理及异同 1. cookie的创建和读取 cookie是客户端技术,服务器把每个用户的数据以cookie的形式写给用户各自的浏览器.当用户使用浏览器再去访问服务器中的w ...
- unittest批量执行测试用例
现有四个测试用例分别在两个.py文件中,如何执行这些文件? unittest中有这样处理:unittest.TestLoader().discover() 第一个文件test_case1.py fro ...
- 巧妙设置Texture Type,将ShadowMask内存占用变成之前的1/4
0x00 前言 在这篇文章中,我选择了过去一周Unity官方社区交流群中比较有代表性的几个问题,总结在这里和大家进行分享.同时,也欢迎大家加入我们这个讨论干货的官方技术群,交流看法分享经验. Unit ...
- #Java学习之路——基础阶段(第五篇)
我的学习阶段是跟着CZBK黑马的双源课程,学习目标以及博客是为了审查自己的学习情况,毕竟看一遍,敲一遍,和自己归纳总结一遍有着很大的区别,在此期间我会参杂Java疯狂讲义(第四版)里面的内容. 前言: ...
- Java开发快速上手
Java开发快速上手 前言 1.我的大学 2.对初学者的建议 3.大牛的三大特点 4.与他人的差距 第一章 了解Java开发语言 前言 基础常识 1.1 什么是Java 1.1.1 跨平台性 1.2 ...
- [Swift]LeetCode509. 斐波那契数 | Fibonacci Number
The Fibonacci numbers, commonly denoted F(n) form a sequence, called the Fibonacci sequence, such th ...
- [Swift]LeetCode743. 网络延迟时间 | Network Delay Time
There are N network nodes, labelled 1 to N. Given times, a list of travel times as directededges tim ...
- 重磅推出TabLayout高级窗口组件
TabLayout是在APICloud现有窗口系统基础上升级而来的高级窗口组件,符合Material Design规范,可通过简单的配置为窗口实现原生的导航栏和TabBar,它将帮助您节省30%以上的 ...
- scala的input
获取用户输入的信息,一般使用 input 函数,但是 scala 里面是没有 input 这个方法的,为了获取控制台的输入操作, scala 定义的方法为: val Inputcontent = Co ...