可以认为线程是一个虚拟进程,用于独立运行一个特定的程序。

1.使用c#创建线程

using System;
using System.Threading; //3 namespace MutiThreadDemo
{
class Program
{
static void Main(string[] args)
{
//5
Thread t = new Thread(PrintNumber);
t.Start();
PrintNumber();
Console.ReadLine();
}
//4
static void PrintNumber()
{
Console.WriteLine("Starting ...");
for(int i = ;i< ; i++)
{
Console.WriteLine(i);
}
}
}
}

在上面的代码中,步骤4定义了方法 PrintNumber , 该方法会被主线程和新创建的线程使用。

在我们构造一个线程时,ThreadStart 或 ParameterizedThreadStart 的实例委托会传给构造函数。

我们只需指定在不同线程运行的方法名,而 c# 编译器则会在后台创建这些对象。

运行结果:两组范围为1 -10的数字会随机交叉输出。这说明了PringNumber方法同时运行在主线程和另一个线程。(如果10个数字随机交叉不明显,可以增加到100试试)

2.暂停线程

这里展示如何让一个线程等待一段时间而不用消耗操作系统资源。

using System;
using System.Threading; namespace MutiThreadDemo
{
class ThreadSleep
{
static void Main(string[] args)
{
Thread t = new Thread(PrintNumbersWithDelay);
t.Start();
PrintNumbers();
Console.ReadLine();
} static void PrintNumbers()
{
Console.WriteLine("Starting ...");
for (int i = ; i < ; i++)
{
Console.WriteLine(i);
}
} static void PrintNumbersWithDelay()
{
Console.WriteLine("Starting ...");
for(int i = ; i < ; i++)
{
Thread.Sleep(TimeSpan.FromSeconds(2));
Console.WriteLine(i);
}
}
}
}

在PrintNumbersWithDeplay方法中加入了Thread.Sleep方法调用。这会导致线程在执行该代码时,在打印任何数字之前会等待指定的时间(这里是2秒钟)。

3.线程等待

这里将展示如何让程序等待另一个程序中的计算完成,然后在代码中使用该线程的计算结果

使用Thread.Sleep行不通,因为并不知道计算需要花费的具体时间。

using System;
using System.Threading; namespace MutiThreadDemo
{
class Thread_Join
{
static void Main(string[] args)
{
Console.WriteLine("Starting ...");
Thread t = new Thread(PrintNumbersWithDeplay);
t.Start();
t.Join();
Console.WriteLine("Thread completed");
Console.ReadLine();
} static void PrintNumbersWithDeplay()
{
Console.WriteLine("Starting ...");
for (int i = ; i < ; i++)
{
Thread.Sleep(TimeSpan.FromSeconds());
Console.WriteLine(i);
}
} }
}

运行结果:

当程序运行时,启动了一个耗时较长的线程来打印数字,打印每个数字前要等待两秒。

但是我们在主程序中调用了 t.Join 方法,该方法允许我们等待直到线程 t 完成。

当线程 t 完成时,主程序会继续运行。

借助该技术可以实现在两个线程间同步执行步骤。

4.终止线程

...

c#之线程基础(一)的更多相关文章

  1. Qt之线程基础

    何为线程 线程与并行处理任务息息相关,就像进程一样.那么,线程与进程有什么区别呢?当你在电子表格上进行数据计算的时候,在相同的桌面上可能有一个播放器正在播放你最喜欢的歌曲.这是一个两个进程并行工作的例 ...

  2. Android多线程研究(1)——线程基础及源代码剖析

    从今天起我们来看一下Android中的多线程的知识,Android入门easy,可是要完毕一个完好的产品却不easy,让我们从线程開始一步步深入Android内部. 一.线程基础回想 package ...

  3. JAVA与多线程开发(线程基础、继承Thread类来定义自己的线程、实现Runnable接口来解决单继承局限性、控制多线程程并发)

    实现线程并发有两种方式:1)继承Thread类:2)实现Runnable接口. 线程基础 1)程序.进程.线程:并行.并发. 2)线程生命周期:创建状态(new一个线程对象).就绪状态(调用该对象的s ...

  4. 【windows核心编程】 第六章 线程基础

    Windows核心编程 第六章 线程基础 欢迎转载 转载请注明出处:http://www.cnblogs.com/cuish/p/3145214.html 1. 线程的组成 ①    一个是线程的内核 ...

  5. C#当中的多线程_线程基础

    前言 最近工作不是很忙,想把买了很久了的<C#多线程编程实战>看完,所以索性把每一章的重点记录一下,方便以后回忆. 第1章 线程基础 1.创建一个线程 using System; usin ...

  6. Qt 线程基础(Thread Basics的翻译,线程的五种使用情况)

    Qt 线程基础(QThread.QtConcurrent等) 转载自:http://blog.csdn.net/dbzhang800/article/details/6554104 昨晚看Qt的Man ...

  7. 线程基础(CLR via C#)

    1.线程基础  1.1.线程职责  线程的职责是对CPU进行虚拟化.Windows 为每个进程豆提供了该进程专用的线程(功能相当于一个CPU).应用程序的代码进入死循环,于那个代码关联的进程会&quo ...

  8. Linux 系统应用编程——线程基础

    传统多任务操作系统中一个可以独立调度的任务(或称之为顺序执行流)是一个进程.每个程序加载到内存后只可以唯一地对应创建一个顺序执行流,即传统意义的进程.每个进程的全部系统资源是私有的,如虚拟地址空间,文 ...

  9. python2 线程基础

    1,感谢菜鸟教程, 线程基础:导入,创建函数,创建线和运行 import thread import time # 为线程定义一个函数 def print_time(threadName, delay ...

  10. 《CLR via C#》读书笔记 之 线程基础

    第二十五章 线程基础 2014-06-28 25.1 Windows为什么要支持线程 25.2 线程开销 25.3 停止疯狂 25.6 CLR线程和Windows线程 25.7 使用专用线程执行异步的 ...

随机推荐

  1. 005 Python开发环境配置

    目录 一.概述 二.Python语言概述 2.1 Python语言的诞生 2.2 Monty Python组合 三.Python语言系统开发环境配置 四.Python程序编写与运行 4.1 Pytho ...

  2. Linux下编译提示arm-none-linux-gnueabi-gcc: command not found

    自己的Linux系统中已经正确安装了交叉编译器arm-2009q3,路径设置正常. 但是在使用arm-none-linux-gnueabi-gcc编译时提示  arm-none-linux-gnuea ...

  3. asp.netcore2.1 IIS部署发布

    下载SDK .net core2.1 SDK下载地址:https://www.microsoft.com/net/download 创建Demo项目 打开 powershell 新建项目 dotnet ...

  4. Python集训营45天—Day02

    目录 变量和运算符 1.1 初步介绍 1.2 使用案例 1.3 知识点梳理 1.4 练习 序言:这一章我们将学习变量以及常见的类型,我们将以案例和代码相结合的方式进行梳理,但是其中所有的案例和知识点 ...

  5. 小程序·云开发的HTTP API调用丨实战

    小程序云开发之httpApi调用. 小程序云开发之httpApi调用(返回"47001处理") 技术栈 采用 nodejs + express 搭建web服务器,采用 axios ...

  6. Flink 从 0 到 1 学习 —— 如何自定义 Data Sink ?

    前言 前篇文章 <从0到1学习Flink>-- Data Sink 介绍 介绍了 Flink Data Sink,也介绍了 Flink 自带的 Sink,那么如何自定义自己的 Sink 呢 ...

  7. django配置静态文件的两种方法

    方法一:按照django配置静态文件的方法,可以在APP应用目录下创建一个static的文件夹,然后在static文件夹下创建一个和APP同名的文件夹,如我有一个blog的django项目,在下面有一 ...

  8. NodeManager概述(基本职能和内部架构)

    概述 NodeManager是运行在单个节点上的代理,它需要与应用程序的的ApplicationMaster和集群管理者ResourceManager交互: 从ApplicationMaster上接收 ...

  9. 初学Spring的感觉

    1.使用接口 不同的类实现同一接口后都会变成同一类型的类.   spring作业1的思路 lab1: 建立一个有一个输出方法的接口类|并建一个英语类和一个数学类实现该接口.   这两个实现类都重写了那 ...

  10. SpringBootSecurity学习(06)网页版登录方法级别的权限

    用户授权 前面讨论过,Web应用的安全管理,主要包括两个方面的内容,一个是用户身份的认证,即用户登录的设计,二是用户授权,即一个用户在一个应用系统中能够执行哪些操作的权限管理.前面介绍了登录,下面简单 ...