线程与进程___(一)

1、线程

Thread 类创建得线程为前台线程,线程池中的为后台线程,,,Main方法结束后,前台线程仍然运行,直到完成,而后台线程立刻结束。

调用线程时候不会立刻进入 Running 状态, 而是处于Unstarted状态,只有当操作系统得线程调度器选择了要运行得线程,这个线程得状态才会修改为Running 状态,,我们使用Thread.Sleep() 方法可以让当前线程进入休眠状态。

使用Tread对象得 Abort() 方法可以停止线程,在终止要终止得线程中抛出ThreadedAbortException 类型得一场,我们可以try catch 一场,然后再线程结束前做一些清理工作。

如果需要等待线程得结束,可以调用Thread对象得Join方法,表示把Thread加入进来,停止当前线程,并设为WaitSleeoJoin 状态,知道加入得线程完成为止。

1.1、多线程资源冲突

C# 多线程学习(五)线程同步和冲突解决_c# 线程冲突现象-CSDN博客

lock关键字:同一时间,只能被一个线程调用

1.2、死锁问题

出现这种情况的原因就是多个线程都是对同一个资源进行操作所致,所以在多线程编程应尽可能避免这种情况,当然有些情况下确实避免不了这种情况,这就需要对其采用一些手段来确保不会出现这种情况,这就是所谓的线程的同步。

在C#中实现线程的同步有几种方法:lock、Mutex、Monitor、Semaphore、Interlocked和ReaderWriterLock等。同步策略也可以分为同步上下文、同步代码区、手动同步几种方式。

C#中的死锁和解决方案_c# 死锁-CSDN博客

问题: 同时用一把叉子,,一把刀子 ,或者两个都要的问题。

设计拿锁的先后顺序

2、任务

TaskFactory 任务工厂来启动任务

cs 复制代码
    internal class Program
    {
        static void Test()
        {
            for (int i = 0; i<1000;i++)
            {
                Console.WriteLine("A");
            }
        }
        static void Main(string[] args)
        {
            TaskFactory tf = new TaskFactory();
            Task t1 = tf.StartNew(Test);
            Thread.Sleep(1000);
        }
    }
相关推荐
人工智能AI技术20 分钟前
能用C#开发AI吗?
人工智能·c#
自己的九又四分之三站台3 小时前
6. 简单将原生代码改为流式请求
c#
一叶星殇5 小时前
C# .NET 如何解决跨域(CORS)
开发语言·前端·c#·.net
JQLvopkk6 小时前
C#调用Unity实现设备仿真开发浅述
开发语言·unity·c#
zxy28472253016 小时前
使用Topshelf部署window后台服务(C#)
c#·安装·topshelf·后台服务
缺点内向8 小时前
C# 高效统计 Word 文档字数:告别手动,拥抱自动化
c#·自动化·word
skywalk81639 小时前
介绍一下 Backtrader量化框架(C# 回测快)
开发语言·c#·量化
Never_Satisfied9 小时前
C#数组去重方法总结
开发语言·c#
阿蒙Amon9 小时前
C#每日面试题-静态构造函数和普通构造函数区别
java·开发语言·c#
Java程序员威哥9 小时前
SpringBoot4.0+JDK25+GraalVM:云原生Java的性能革命与落地指南
java·开发语言·后端·python·云原生·c#