多线程笔记

using System.Collections;
using System.Collections.Generic;
using UnityEngine;
using System.Threading;

public class xiancheng : MonoBehaviour
{
    static bool isRuning = true;
    // Start is called before the first frame update
    void Start()
    {
        #region 知识点一 了解线程前先了解进程
        //进程(Process) 是计算机中的程序关于某数据集合上的一次运行活动
        //是系统进行资源分配和调度的基本单位,是操作系统结构的基础
        //说人话:打开一个应用程序就是在操作系统上开启了一个进程
        //进程之间可以相互独立运行,互不干扰
        //进程之间也可以相互访问、操作
        #endregion

        #region 知识点二 什么是线程
        //操作系统能够进行运算调度的最小单位
        //它被包含在进程之中,是进程中的实际运作单位
        //一条线程指的是进程中一个单一顺序的控制流,一个进程中可以并发多个线程
        //我们目前写的程序  都在主线程中

        //简单理解线程:
        //就是代码从上到下运行的一条“管道”
        #endregion

        #region 知识点三 什么是多线程
        //我们可以通过代码  开启新的线程
        //可以同时运行代码的多条“管道” 就叫多线程
        #endregion

        #region 知识点四 语法相关
        //线程类 Thread
        //需要引用命名空间  using  System.Treading;
        //1.申明一个新的线程
        //   注意  线程执行的代码  需要封装到一个函数中

        //  新线程 将要执行的代码逻辑 被封装到了一个函数语句块中
        Thread t = new Thread(NewThreadLogic);

        //2.启动线程
        t.Start();

        //3.设置为后台线程
        //当前台线程都结束了的时候,整个程序也就结束了,即使还有后台线程正在进行
        //后台线程不会防止应用程序的进程被终止掉
        //如果不设置为后台线程 可能会导致进程无法正常关闭
        t.IsBackground = true;
        isRuning = false;


        //4.关闭释放一个线程
        //如果开启的线程中不是死循环 是能够结束的逻辑 那么 不用刻意的去关闭它
        //如果是死循环 想要终止这个线程 有两种方式
        //4.1-死循环中bool标识
        t = null;

        //4.2-通过线程提供的方法(注意在.Net core版本中无法中止  会报错)
        //中止线程
        try
        {
            t.Abort();
            t = null;
        }
        catch 
        {

           
        }

        //5.线程休眠
        //让线程休眠多少毫秒   1s=1000毫秒
        //在哪个线程里执行  就休眠哪个线程
        //Thread.Sleep(1000);
        #endregion

        #region 知识点五 线程之间共享数据
        //多个线程使用的内存是共享的,都属于该应用程序(进程)
        //所以要注意 当多线程 同时操作同一片内存区域时可能会出问题
        //可以通过加锁的形式避免问题

        //lock
        //当我们在多个线程当中想要访问同样的东西 进行逻辑处理时
        //lock(引用类型对象)
        
        
        while (true)
        {
            lock (this)
            {
                Console.SetCursorPosition(0, 0);
                Console.ForegroundColor = ConsoleColor.Red;
                Console.Write("●");
            }
           
        }
        #endregion

        #region 知识点六 多线程对于我们的意义
        //可以用多线程专门处理一些复杂耗时的逻辑
        //比如 寻路、网络通信等等
        #endregion
    }
    static void NewThreadLogic()
    {
        //新开线程 执行的代码逻辑  在该函数语句块中

        while (isRuning)
        {
            //Thread.Sleep(1000);
            //Debug.Log("新开线程代码逻辑");

            Console.SetCursorPosition(0, 0);
            Console.ForegroundColor = ConsoleColor.Yellow;
            Console.Write("▪");
        }

       
    }
    // Update is called once per frame
    void Update()
    {
        
    }
}
//总结
//多线程是多个可以同时执行代码逻辑的“管道”
//可以通过代码开启多线程,用多线程处理一些复杂的可能影响主线程流畅的逻辑
//关键字 Thread

  • 5
    点赞
  • 7
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值