C# 线程(二)——Thread学习
public static void Dosomething(object? word)
{
Console.WriteLine(word.ToString());
}
ParameterizedThreadStart ps = new ParameterizedThreadStart(Dosomething);
Thread thread1 = new Thread(ps);
thread1.Start("埃里克多");
1.2不带参数的构造方法——Thread(ThreadStart)
ThreadStart构造方法,定义:public delegate void ThreadStart();
ThreadStart ts = new ThreadStart(Dothing);
Thread thread2 = new Thread(ts);
thread2.Start();
public static void Dothing()
{
Console.WriteLine("这是个无参数的方法。。。。");
}
二、相关属性及方法
Thread.Start():启动线程的执行;
Thread.Suspend():挂起线程,或者如果线程已挂起,则不起作用;
Thread.Resume():继续已挂起的线程;
Thread.Interrupt():中止处于 Wait或者Sleep或者Join 线程状态的线程;
Thread.Join():阻塞调用线程,直到某个线程终止时为止
Thread.Sleep():将当前线程阻塞指定的毫秒数,此时线程处于休眠状态,期间此线程不再得到系统分配的执行时间片。
Thread.Abort():以开始终止此线程的过程。
2.1线程的执行是无序的
DisorderVerify();
//多次执行后会得到下面两种结果
//结果一:
//Thread_2 is start
//Thread_1 is start
//结果二:
//Thread_1 is start
//Thread_2 is start
static void DisorderVerify()
{
Thread thread1 = new Thread(() => Console.WriteLine("Thread_1 is start"));
thread1.Name = "Thread_1"; Thread thread2 = new Thread(() => Console.WriteLine("Thread_2 is start"));
thread2.Name = "Thread_2"; thread1.Start();
thread2.Start();
}
2.2 Thread.join函数
当thread1调用Join方法的时候,主线程MainThread、thread2就被停止执行,直到thread1线程执行完毕,MainThread、thread2存在交叉执行
for (int i = 0; i < 20; i++)
{
if (i == 4)
{
JoinMethodTest();
}
else
{
Console.WriteLine($"主线程执行:{i}");
} }
static void JoinMethodTest()
{
Thread thread1 = new Thread(() =>
{
for (int i = 0; i <10; i++)
{
Console.WriteLine("ddd");
} });
Thread thread2 = new Thread(() =>
{
for (int i = 0; i < 10; i++)
{
Console.WriteLine("aaa");
} });
thread1.Start();
thread1.Join();
//等待thread1执行完再执行
thread2.Start();
}
执行结果:
//主线程执行:1
//主线程执行:2
//主线程执行:3
//ddd
//ddd
//ddd
//ddd
//ddd
//ddd
//ddd
//ddd
//ddd
//ddd
//主线程执行:5
//主线程执行:6
//主线程执行:7
//主线程执行:8
//主线程执行:9
//主线程执行:10
//主线程执行:11
//主线程执行:12
//主线程执行:13
//aaa
//aaa
//aaa
//aaa
//aaa
//aaa
//aaa
//aaa
//aaa
//aaa
//主线程执行:14
//主线程执行:15
//主线程执行:16
//主线程执行:17
//主线程执行:18
//主线程执行:19
三、前台线程及后台线程
Thread默认创建的为前台线程,可以看到当thread 为前台线程时,即使主线程执行结束,thread也会执行后程序才会结束;当threa为后台线程时,主线程执行结束,程序就结束了。
public static void BackGroundThreadTest()
{
Thread thread = new Thread(() =>
{
Thread.Sleep(3000);
Console.WriteLine("后台线程测试");
});
thread.IsBackground = true;
thread.Start(); }
//后台方法测试
BackGroundThreadTest();
Console.WriteLine("主线程结束。。。。");
//打印结果:
//主线程结束。。。。 //将方法里的thread.IsBackground = true;注释
//打印结果:
//主线程结束。。。。
//后台线程测试
C# 线程(二)——Thread学习的更多相关文章
- java并发编程学习: 守护线程(Daemon Thread)
在正式理解这个概念前,先把 守护线程 与 守护进程 这二个极其相似的说法区分开,守护进程通常是为了防止某些应用因各种意外原因退出,而在后台独立运行的系统服务或应用程序. 比如:我们开发了一个邮件发送程 ...
- java学习笔记之线程(Thread)
刚开始接触java多线程的时候,我觉得,应该像其他章节的内容一样,了解了生命周期.构造方法.方法.属性.使用的条件,就可以结束了,然而随着我的深入学习了解,我发现java的多线程是java的一个特别重 ...
- 从零开始构建一个Reactor模式的网络库(二)线程类Thread
线程类Thread是对POSIX线程的封装类,因为要构建的是一个Linux环境下的多线程网络库,对线程的封装是很必要的. 首先是CurrentThread命名空间,主要是获取以及缓存线程id: #if ...
- 7种创建线程方式,你知道几种?线程系列Thread(一)
前言 最近特别忙,博客就此荒芜,博主秉着哪里不熟悉就开始学习哪里的精神一直在分享着,有着扎实的基础才能写出茁壮的代码,有可能实现的逻辑有多种,但是心中必须有要有底哪个更适合,用着更好,否则则说明我们对 ...
- 201871010105-曹玉中《面向对象程序设计(java)》第十二周学习总结
201871010105-曹玉中<面向对象程序设计(java)>第十二周学习总结 项目 内容 这个作业属于哪个课程 https://www.cnblogs.com/nwnu-daizh/ ...
- Java 使用线程方式Thread和Runnable,以及Thread与Runnable的区别
一. java中实现线程的方式有Thread和Runnable Thread: public class Thread1 extends Thread{ @Override public void r ...
- C#中的线程二(Cotrol.BeginInvoke和Control.Invoke)
C#中的线程二(Cotrol.BeginInvoke和Control.Invoke) 原文地址:http://www.cnblogs.com/whssunboy/archive/2007/06/07/ ...
- 【转】线程、Thread类和线程终止
一.线程Thread启动 0. Thread类实现了java.lang.Runnable接口,即实现了run方法.虽然在Sun JDK中,start()调用了start0()方法,start0()方法 ...
- 【Java线程池快速学习教程】
1. Java线程池 线程池:顾名思义,用一个池子装载多个线程,使用池子去管理多个线程. 问题来源:应用大量通过new Thread()方法创建执行时间短的线程,较大的消耗系统资源并且系统的响应速度变 ...
- 线程(Thread,ThreadPool)、Task、Parallel
线程(Thread.ThreadPool) 线程的定义我想大家都有所了解,这里我就不再复述了.我这里主要介绍.NET Framework中的线程(Thread.ThreadPool). .NET Fr ...
随机推荐
- 亮相2024 DPU&AI Networking创新大会,天翼云斩获两项大奖!
近日,以"智驱网络 芯动未来"为主题的2024 DPU&AI Networking创新大会在北京举办.大会表彰了在DPU与AI网络技术创新及实践应用中取得卓越成就的单位与项 ...
- Python 数
Python 数 在Python中,数字是编程中不可或缺的一部分.Python支持多种类型的数字,包括整数.浮点数等.下面我们将详细介绍这些数字类型以及它们之间的运算和格式化. 整数 整数是Pytho ...
- Q:批处理备份临时文件
批处理:将本月临时文件移动到历史目录中 chcp 936 @echo off set month=%date:~2,2%%date:~5,2% set year=%date:~0,4% echo %y ...
- Typecho 引入JS简单的实现点击文字即可复制
在文章中插入大量无意义内容一不美观,二不便复制,不如使用 js 创建隐藏内容的复制按钮吧. 引入 JS 本主题:依次进入 控制台 - 外观 - 设置外观 - 主题自定义扩展,将以下代码加入到 自定义 ...
- Ansible - [05] 配置文件详解
主配置文件 ansible.cfg 修改sudo相关配置,在实际工作中,可能使用ansible时,所使用的用户并不是root用户,而是管理员给的一个普通用户,所以需要考虑ansible相关配置文件需要 ...
- 【渗透测试】Vulnhub GROTESQUE 1.0.1
渗透环境 攻击机: IP: 192.168.10.18(Kali) 靶机: IP:192.168.10.9 靶机下载地址:https://www.vulnhub.com/entry/gro ...
- 探秘Transformer系列之(10)--- 自注意力
探秘Transformer系列之(10)--- 自注意力 目录 探秘Transformer系列之(10)--- 自注意力 0x00 概述 0x01 原理 1.1 设计思路 1.2 输入 1.3 QKV ...
- 李沐动手学深度学习V2-chap_preliminaries
李沐动手学深度学习V2 文章内容说明 本文主要是自己学习过程中的随手笔记,需要自取 课程参考B站:https://space.bilibili.com/1567748478?spm_id_from=3 ...
- 震惊!AI 编程竟然让程序员 “失业” 了?真相让人意外
在科技飞速发展的当下,AI 编程的异军突起无疑成为了整个编程领域乃至社会各界热议的焦点. 去年,全球首个AI程序员Devin横空出世,不仅能独立完成代码开发.修复Bug,甚至能通过阅读技术文档自主学习 ...
- Web前端入门第 13 问:HTML 标签和属性是否区分大小写?
HELLO,这里是大熊学习前端开发的入门笔记. 本系列笔记基于 windows 系统. 注意:以下截图都来源于 Chrome 浏览器,不同浏览器可能会产生不同的渲染结果. 思考一个问题:英文写法都分大 ...