‫欢迎回来｡
‫在上一个视频中, 您了解了如何使用线程, 以及如何设置威胁并简单地启动它们｡
‫在这段视频中, 我们将了解如何完成｡
‫因此, 我们希望使用线程来完成某项任务, 并且只有在特定任务完成后, 我们才希望继续执行｡
‫让我们来看看｡
‫我将创建一个名为任务完成源的新变量, 因此我需要新的任务完成源和一个布尔值｡
‫正如你所看到的, 它在抱怨, 因为它不知道这个任务完成源是什么｡
‫为了解决这个问题, 我需要使用sys线程任务｡
‫所以我就先这样做一会儿｡
‫然后这里｡
‫我接下来要做的就是创建一个测试变量.
‫我将调用一个任务, 它是一个任务完成源, 或者我们将其称为任务完成源｡
‫而我们把它的任务设定为结果｡
‫所以我们希望有那个任务的结果｡
‫因此, 假设有一个特定的任务应该运行并执行某些操作, 然后我们希望看到结果｡
‫所以如果它成功了或者失败了, 为了测试它, 我将去掉这条红线｡
‫所以我将运行这段代码, 就好像这个main方法中没有其他东西, 只有这段代码一样.
‫所以我要去运行它｡
‫如你所见, 什么也没发生｡
‫所以控制台保持活动或打开状态, 即使我们没有控制台红线,
‫如果我们想保持控制台打开状态, 我们通常会使用它, 这意味着还有一些事情没有完成｡
‫所以这实际上永远不会结束, 因为没有结果｡
‫所以这个补全源代码实际上永远不会完成, 所以它永远不会被设置为true｡
‫这是我们可以手动完成的｡
‫假设我们有一个任务, 我们希望得到这里的结果, 但我们实际上希望在某个点上完成任务｡
‫因此, 我们需要做的就是创建一个线程｡
‫因此,
‫我将创建一个var线程, 它等于新线程, 并且该线程不会立即启动｡
‫所以我用了一个和这里不同的方法｡
‫所以这里我们只说了新线程, 然后我们有了线程的主体｡
‫因此, 对于在启动此线程时应执行的代码, 我们立即启动, 我们立即开始｡
‫但这里我们只创建线程, 稍后可以使用它进行操作｡
‫这里我只讲线程休眠｡
‫所以, 我们只需要休眠1000毫秒, 然后尝试将任务完成源设置为true,
‫这样就可以设置结果｡
‫它所做的就是尝试将底层任务转换为“已运行至完成”状态, 这意味着它已正确完成,
‫因此它将尝试将其done设置为true｡
‫因此, 这意味着此任务完成源将被设置为true｡
‫只有这样, 我们才能得到这个VAR, 这是该任务的结果｡
‫所以让我们创造一点｡
‫进来吧
‫因此, 调试步骤, 让我们检查线程ID｡
‫现在, 为了启动线程, 我们实际上需要调用thread start｡
‫正如您所看到的, 这里的线程对象是一个线程, 它将执行所有将要启动的操作｡
‫我将以这样的方式开始这个线程, 在此过程中, 让我们来看看线程提供了什么｡
‫因此, 无论何时创建线程对象, 都有多个属性和方法可供使用｡
‫或者我们可以在这里使用多个｡
‫所以你可以看到一个板是一个你可以中止线程, 这样你就可以停止线程, 但这将运行一个异常或它将导致一个异常｡
‫所以这样做是非常危险的｡
‫因此, 您可以根据安全性如何构建应用程序, 使其崩溃｡
‫但是一个板子是你当然可以用来停止一个线程的东西, 但是你永远不知道它在执行中走了多远｡
‫因此, 它可能会发生, 它没有完成的任务, 你想做的, 这将导致, 嗯,
‫你的程序不能正常工作｡
‫当然, 还有很多其他非常有趣的方法, 比如, 或者, 属性,
‫比如, is alive, 这意味着线程当前处于活动状态,
‫然后是background, 这意味着我们可以说线程应该在后台运行, 我们可以用这个属性来检查｡
‫无论它是否在后台, 都是对线程的威胁｡
‫这是我们稍后将检查的内容｡
‫那么, 什么是线程池呢？
‫这是我们稍后会看到的｡
‫因此, 托管线程ID非常有趣, 它将告诉我们当前正在运行的线程的ID｡
‫所以让我们使用它, 把它打印到控制台上｡
‫看到了W, 我将使用线程编号｡
‫因此, 您可以使用美元符号, 然后获得线程编号或线程ID, 这样就可以调用它｡
‫然后在大括号中使用线程托管ID, 因此｡
‫线程托管线程ID｡
‫当然, 你需要关闭字符串｡
‫好了, 现在我们来测试一下｡
‫让我们运行代码｡
‫我们有我们的主线｡
‫到目前为止, 我们在控制台上有一些东西｡
‫如您所见, 线程数为3｡
‫因此, 我们自己创建的线程的数量实际上是三个, 而主线程的托管ID是一个｡
‫正如你所看到的, 这些数字实际上并不一定是你所期望的那样｡
‫因此, 即使我们没有在这里创建自己的附加线程, 它也从1到3｡
‫因此, 必须有其他线程正在运行, 我们在这里看不到｡
‫好吧, 我会的
‫顺便说一句, 如果你想知道一个线程是否已经开始和结束, 你可以做下面的事情｡
‫是这样｡
‫所以我们把它剪下来放到这条线上｡
‫实际上, 让我们假设从这里开始｡
‫我们不能使用线程, 因为线程就是我们在这里创建线程｡
‫但是如果我们想在这里使用它在线程体本身内, 那么我们需要用线程点号当前线程｡
‫所以如果我们现在这样做, 我们将得到我们目前所处的线程, 这正是我们所处的线程｡
‫在这里, 我们说它开始了, 在它完成后, 我们说它结束了｡
‫现在开始运行｡
‫它在运行代码｡
‫如您所见, 控制台上没有显示任何内容｡
‫让我们进入下一步｡
‫然后开始和结束｡
‫所以事情发生得相当快｡
‫但正如你所见, 有｡
‫所以我们给予它一点时间｡
‫让我们把它改成5秒｡
‫我们也去掉这里的调试点, 然后运行它｡
‫所以第三个线程开始了, 然后花了一段时间, 它就完成了｡
‫现在您可以看到, 这行代码实际上已正确执行, 它只是停止了我们的控制台｡
‫因此, 让我们使用控制台读取行来保持控制台打开｡
‫因此, 线程3开始, 然后5秒后, 它应该结束, 所以我们是线程3结束｡
‫现在, 假设我们希望看到任务实际完成｡
‫所以如果它成功了, 就把它设为真或假｡
‫好吧, 我们知道, 因为否则我们就不会进入下一步｡
‫不过让我们在这里用控制台右线｡
‫任务已经完成了, 在这里我只需要写下测试结果｡
‫所以测试只是一个碗, 正如你在这里看到的, 因为它要么成功, 要么失败｡
‫所以我们要么卖真要么卖假｡
‫让我们来看看｡
‫现在我们需要等待5秒钟｡
‫第三个数字开始5秒, 然后第三个数字结束, 它说任务完成等于真｡
‫这就是这条线所发生的情况｡
‫所以它只是简单地说它已经完成了这个特定的任务｡
‫好吧, 我会的
‫因此, 在本视频中, 您了解了如何使用任务完成源, 该源指示任务是否已完成｡
‫您可以将其设置为true, 也可以简单地执行某项操作并将其完成｡
‫不久之后,
‫您还发现可以用不同的方式创建线程, 因此您实际上可以创建一个thread变量, 然后您必须启动该变量, 并且您可以简单地使用thread类的对象｡
‫然后, 我们了解了如何使用管理线程ID, 以便了解特定线程的ID｡
‫在下一个视频中, 我们将进一步了解这一点,
‫在此视频中, 我们将同时创建多个线程, 然后我们将看到我们的计算机将如何处理这些线程｡
‫下一段视频再见｡