zoukankan      html  css  js  c++  java
  • 线程基础

          线程比较重要,最近面试的话几乎都会问到, 日常中也会用到(不知不觉),到底线程是个什么鬼?结合最近看的几本书,这里做一个记录

    1.什么是进程?线程?多线程?优点?缺点?

           对于计算机而言,每双击一个应用程序,系统都会对此程序分配一个或者多个进程,这一点打开工作管理员界面(注销)即可明白。如此,进程则可以理解为线程的容器,由系统创建,又在具体执行过程中创建了线程。而线程是进程中的独立执行单元,对于系统而言,是通过调度线程来是应用程序工作。多线程可狭义的理解程序中包含有多个单线程的执行流。

    优点: 由于存在优先级、等待等机制,这使得多线程能提高CPU的利用率,当不需要某个线程时,可调用等待方法来达到目的

    缺点: 线程需要占用内存,线程越多占用内存也越多; 
               多线程需要协调和管理,所以需要CPU时间跟踪线程; 
               线程之间对共享资源的访问会相互影响,必须解决竞用共享资源的问题;
               线程太多会导致控制成本增加,会增加不可控的的风险

    2.使用C#创建一个线程

            public static void WirteNumber()
            {
                for (int i = 0; i < 10; i++)
                {
                    Console.WriteLine(i);
                }
            }
    
            public static void Maintest()
            {
                Thread t = new Thread(WirteNumber);
                t.Start();  //執行線程
            }

    初看,并不觉有什么神奇之处,仅仅是多了一个Thread 对象,利用反射可以查到,Thread的构造函数有两类,一类带参数,一类不带参数

    如: 不带参数(ThreadStart 委托) --     t.Start()

            带参数(ParameterizedThreadStart 委托) --  t.Start(Para)

    而对于其他的简单操作,这里列表统计下

    3.前台线程和后台线程

         在一个进程中,当所有前台线程停止运行后,CLR会强制结束所有仍在运行的后台程线程,这些后台线程会被直接终止,而不会抛出异常,只有设置了IsBackground属性为True,Thread类所创建的线程才为后台线程,否则为前台线程。

        如果想让后台线程先执行完,那么可以使用 join、sleep 方法来实现

     4. 使用 C# 中的 lock 关键字

     5. 使用 Monitor 类锁定资源

         锁可以用来保护资源,常见的订票系统,比如客户每订一张票,后台系统的数据库就减少一张,如果共有1000张,当A用户下单的时刻,后台票数(资源)是被锁起来,即同一时刻只能有一个客户来下单,这样后台出票的顺序也是连续的,然后B客户下单。若多客户同时下单,后台票号就不能连贯输出。具体例子如下:

     6. 处理异常

         程序一单运行,就有可能出现异常,优秀的代码只是出现异常的可能性较小,如何正确的去捕捉、处理 异常,是程序中必须要考虑的问题。线程也不例外。

        上面的内容来自《C#线程基础》这本书,其实说的都是很简单的基础内容,看看就好.

     7. 应用线程

       真正项目中,会有一些线程的综合应用,包括线程池、异步多线程等等,实际项目中对于 Task、Timers 这这种用的是最多的,使用提来也方便,操作也简单。

  • 相关阅读:
    rest webapi 返回数据
    下载指定路径的文件到本地服务器
    NPOI excel文件解析
    (Demo分享)利用JavaScript(JS)实现一个九宫格拖拽功能
    关于DOM的理解
    (Demo分享)利用JavaScript(JS)做一个可输入分钟的倒计时钟功能
    关于闭包函数和递归函数的详细理解
    纯CSS制作加<div>制作动画版哆啦A梦
    冒泡排序
    Python常用模块及正则表达式知识点,你需要了解的全在这了
  • 原文地址:https://www.cnblogs.com/Sientuo/p/7264489.html
Copyright © 2011-2022 走看看