‫欢迎回来｡
‫在本视频中, 我们将探讨线程, 因此我们将介绍线程的基本概念,
‫您将了解如何创建线程以及如何创建多个线程｡
‫因此, 让我们从以特定方式使用控制台右行开始｡
‫所以我将创建多个世界, 比如说, 四个世界, 我将说, 你好, 世界一,
‫你好, 世界二, 世界三和世界四｡
‫所以, 如果我们运行这些世界, 首先, 我们当然需要控制台红线, 这样控制台就可以保持打开和唤醒状态｡
‫如果我们运行它们, 那么将会发生什么是非常基本的｡
‫所以他们只需要在屏幕上打印四次Hello World｡
‫然后我们就是Hello World｡
‫一, 二, 三, 四｡
‫好吧, 这不是什么新鲜事｡
‫我们以前见过很多, 但是有一种叫做thread的东西, 一个叫做thread的类｡
‫如果我们想使用它, 就需要使用线程命名空间｡
‫所以使用系统点线程, 就是这样｡
‫现在我们可以使用线程｡
‫因此, 我可以继续使用线程类, 如您所见, 创建并控制线程,
‫设置其优先级并获取其状态｡
‫例如, 我们现在可以在有限的时间内使用线程点休眠, 比如说1000毫秒｡
‫这样就可以在helloworld
‫1打印在屏幕上之后, 暂停整个程序或线程, 在这里是主线程或线程, 我们可以在每条语句之后都这样做｡
‫所以我会说只要睡上一段特定的时间, 然后我们就睡了｡
‫你好, 世界一, 二, 三, 四｡
‫所以如果我点击它, 它就会停止｡
‫但通常你可以看到它等待了1/2秒, 在那一秒之后, 它打印出了下一个东西｡
‫它所做的只是真正停止整个线程｡
‫So将当前线程挂起特定或指定的毫秒数｡
‫如果你想在一段特定的时间后做某件事, 你可以这样做｡
‫但要注意, 这实际上是在停止主线程｡
‫因此, 没有什么必须做的事情必须做, 让我们说, 在UI线程可以做｡
‫这里我们没有使用UI, 在本例中我们使用的是控制台应用程序｡
‫但是, 例如, 如果您使用WPF来拥有一个UI, 并且您将主线程暂停1/2,
‫这意味着UI将在整整一秒钟内不响应, 这是用户不希望的, 并且这将是非常糟糕的行为,
‫您不应该这样做｡
‫但是, 这通常只是为了让您了解这里可以使用线程做什么, 对吗？
‫所以你可以在一定时间内造成威胁｡
‫但我们只使用一个线程｡
‫它是主线程, 如果你想了解更多, 那么你必须调试｡
‫为了做到这一点, 我们在这里加一点｡
‫所以这只是一个调试点, 你只需按一下左边的那个条, 比如说第九行, main方法开始的地方｡
‫然后你启动程序, 你可以看到, 什么都不会显示, 因为它暂停在这里｡
‫这就是我们目前所处的位置, 这就是光标所在的位置｡
‫现在, 为了查看任务, 我们需要转到调试Windows, 然后在此处选择线程｡
‫或者你可以按控制键alt h｡
‫我将打开线程, 如您所见, 它们现在是浮动的,
‫我将把它们放在左手｡
‫现在, 您可以看到正在运行的线程, 在我们的示例中, 我们只能看到主线程｡
‫因此, 只有一个执行绪, 而且它的Managed ID为零｡
‫这就是我们的主线程, 它通常执行main方法中的所有操作.
‫所以如果我进行下一步｡
‫如您所见, 我们仍在主线程中, 等待1/2｡
‫我们看到世界是如何被我们打开的｡
‫你可以看到它｡
‫所以现在是第三世界的故事了｡
‫我们睡了1/2, 然后它就等着我们去做下一步｡
‫所以你可以按F十键进入下一步, 然后它会在一秒钟后显示你好世界｡
‫是啊, 我们是｡
‫你好世界4.
‫然后这条红线出现了｡
‫现在我只需要按回车键或者其他什么键, 然后进入下一步｡
‫正如你所看到的, 我们仍然在主线上｡
‫我们的程序关闭了, 所以没有线程了｡
‫这很好, 但这只是我们的主线, 有点无聊｡
‫我们希望了解如何创建线程, 这就是我们在这里的目的｡
‫因此, 让我们继续创建多个线程, 因为这里发生的事情是按顺序完成的｡
‫就这样一步一步, 一排接着一排｡
‫但如果我们想并行执行, 我们可以创建自己的线程, 因为我们不想让它在主线程中运行,
‫但我们想并行运行｡
‫所以我要做的是在这里创建一个新的威胁｡
‫我只说new然后我称它为thread｡
‫我在这里使用了thread类, 你还需要一个又一个括号.
‫在这些括号后面, 是第二个, 这里你用的是等大正弦和花括号｡
‫然后在这里的括号关闭后, 你需要开始｡
‫这就是你如何开始一个线程｡
‫我创建了一个新的线程, 它会立即开始, 因为我调用了Start Here｡
‫仅Start方法会导致操作系统将当前实例的状态更改为线程状态“正在运行”｡
‫因此, 此线程将运行此线程状态, 这意味着它将简单地执行花括号内的任何内容｡
‫因此, 我们可以在这里添加代码, 以便在调用此线程时运行｡
‫假设这个线程是线程1｡
‫我将写一个线程, CW线程, 在此基础上, 我将休眠一秒钟｡
‫所以睡眠1000毫秒, 也就是1/2｡
‫这就是这个线程要做的｡
‫我将要做的是在它下面放置多个线程｡
‫穿一, 二, 三, 四.
‫所以我将重命名它们并注释掉｡
‫我们以前的那些｡
‫控制台正确, 现在开始运行｡
‫就这样
‫正如你所看到的, 它是同时出现的｡
‫所以它等了半分钟, 然后它们都同时出现了｡
‫那到底是怎么回事？
‫让我来谈谈这一点, 也许是重点.
‫是的, 就在那里｡
‫我们再来一遍｡
‫现在我们看到我们的程序就停在这里｡
‫原来是在那里｡
‫但同时,
‫在底部的线程窗口中, 您可以看到已经打开了两个线程, 一个没有名称的工作线程和另一个也没有名称的工作线程｡
‫因此, 我们有一个已经在运行的新线程, 然后其他线程中的一个也被打开｡
‫正如你所看到的主线｡
‫因此, 同时存在三个线程｡
‫现在让我们进入下一步｡
‫此时您可以看到, 突然出现了四个线程, 因此我们这里有四个线程｡
‫所以当第一个开始的时候, 也许只有第二个已经准备好了, 而其他的还没有准备好｡
‫现在, 当线程在经过1毫秒甚至更短的时间后滑动了1000毫秒时, 您可以看到其他线程已经启动｡
‫因此, 我们有四个线程同时运行｡
‫因此, 我们有一个多线程解决方案｡
‫如果执行下一步, 如您所见, 线程2､
‫3和4已显示, 但控制台右侧的线程1尚未显示｡
‫所以它们确实是并行运行的, 但它们并不像你看到的那样完全准确｡
‫因此, 它们需要执行的时间可能会略有不同｡
‫我将进入下一个步骤, 这一行｡
‫现在您可以看到, 第一个线程也已完成｡
‫所以虽然语丝｡
‫在我的代码中, 它们几乎是同时启动的｡
‫正如你所看到的, 它不需要按照我们所想的顺序｡
‫因此, 它不会完全按照我们在这里放置它们的顺序完成｡
‫而是基于他们完成或执行代码的速度｡
‫因此, 这段代码可能比那段代码需要的时间长一点, 或者比其他代码需要的时间长很多｡
‫这就是您必须从中取出的内容, 以便处理线程, 但您必须非常､
‫非常小心, 因为可能会出现多个问题｡
‫我将介绍其中的一些, 我将向你们展示或给予你们, 我将介绍其中的一些｡
‫我也会和你们分享一些链接, 你们可以从中了解更多｡
‫以上就是创建线程的基本思路｡
‫如您所见, 这就是您可以设置的方式｡
‫因此, 线程通常是一小部分工作或执行的一部分工作, 如果您的处理器中有多个内核,
‫您可以同时执行多个任务｡
‫假设您有一个四核处理器, 那么可以同时执行四个线程或四个处理器｡
‫如果你只有一个处理器, 那么只有一个线程或一个任务可以执行, 永远不会发生这样的事情｡
‫它们将被并行执行, 因为这一个处理器一次只执行一个特定的任务｡
‫这意味着, 如果您知道您正在使用多核处理器, 或者您的应用将在多核处理器上运行,
‫您就可以使用多个线程, 否则就会遇到问题｡
‫但一般来说, 如果只有一个内核, 那么主线程将运行,
‫只有当主线程空闲时, 它才会继续执行其他操作｡
‫所以它会运行其他威胁｡
‫假设您有一个UI, 在该UI上您只显示内容｡
‫你有一个按钮｡
‫然后如果你把鼠标悬停在按钮上, 它会改变它的外观, 诸如此类的东西｡
‫这是由主线程完成的｡
‫但如果主线程忙碌, 则其他线程将启动｡
‫如果你有一些应该在后台运行的东西, 那么只要线程1主线程不忙或者线程0不忙,
‫就会在后台运行｡
‫其实它就在这里｡
‫这就是线程｡
‫当然, 我们会进一步了解线程, 但通常情况下, 这就是我想向您介绍的内容｡