多线程

Java 核心
第 6 级 , 课程 1
可用

“你好,阿米戈!我们遇到一个非常难的新主题。很抱歉。它不仅在 Java 中通常被认为是最复杂的主题之一,而且在一般的编程中也是如此。我说的是多线程。”

想象一个典型的计算机游戏,例如宇宙飞船竞赛游戏。你正在飞越广阔的宇宙,同时躲避着陨石和巡逻巡洋舰。还有其他二十多个人正在和你一起参与这些非法竞赛。

假设你决定编写这样一个游戏。你的程序将必须跟踪命令(键盘输入),移动宇宙飞船,计算它们的轨迹,确定任何碰撞的结果,并在用户屏幕上绘制所有这一切。这是一项非常复杂的工作。

还记得我们在有关成长型运输公司的示例中是如何解决“极端复杂问题”的吗?

我们将该公司划分为独立的部门,并严格指定(标准化)它们之间的交互方式。

“但是当独立的部分必须与其他部分并行执行某些工作时,我们该怎么做?!此问题的答案是线程。”

试着将程序想象成运行代码并执行命令小型机器人。首先,它在一行上执行一条命令,然后移至下一行,依此类推。

“我能够想象出来。非常简单!”

“很好。现在,假设你有几个这样的机器人。一个处理用户输入,第二个根据该输入更新对象。第三个执行代码以在屏幕上显示这些对象。第四个每秒钟检查几次是否有任何飞船相撞,如果有,则计算碰撞的结果。”

这样,我们不仅可以将程序划分为独立的部分/对象,还可以使这些部分相互独立地执行工作。各个部分之间的交互越少,程序复杂性越低。

想象一下,你能够用发送字母的脚本替代经理。公司的其他部门甚至都察觉不到有什么变化。这种事情早在 26 世纪就已发生,并取得了优异的成果。大多数经理,甚至高层管理人员,都可以被平均复杂程度的脚本成功替代。只有在“办公室浮游生物工会”介入之后,经理的大规模裁员才会告一段落。不过这个话题就扯远了。

“太有趣了!”

“这些‘小型机器人’当中不仅有几个可以执行代码,它们还可以相互交流并生成新的机器人。”

“生成新的机器人?”

“是的,用于执行新任务。有时,创建另一个机器人(另一个线程)以便与当前线程(机器人)同时执行某些操作会有很多优势。”

这听起来不错,但我想不出用于什么场合。

我们为什么称之为“线程”?

“想象一下,每个机器人都有不同的颜色,并在执行命令时用其颜色标记命令。小型机器人所走的路径就像铅笔划过的线。这条路径在机器人后面连起来,就像针后面的线一样。”

每个“小型机器人”都有一个与生俱来的任务。你可以认为线程是执行此任务时执行的命令集。

假设你正乘坐宇宙飞船运送货物。“运送货物”是你的任务,而你正在执行此任务。而你的飞行路线就是你的线程。我们可以说,每个新任务,每个尚未完成的任务,都有其自己的线程(仍需遍历的路径)。

“换句话说,有一个任务和一个执行该任务的‘小型机器人’。线程就是机器人在完成任务时所走的路径吗?”

“完全正确。”

这就是它内部的工作原理。由于计算机只有一个处理器,因此一次只能执行一个命令。因此实际情形如下:处理器不断地在线程之间切换。它切换到一个新线程,执行几个命令,然后切换到下一个线程,再执行几个命令,依此类推。但是由于每秒发生数百次线程切换,因此在我们看来,所有线程都在同时运行。

多线程 - 1
评论 (4)
TO VIEW ALL COMMENTS OR TO MAKE A COMMENT,
GO TO FULL VERSION
元. 级别 26,Taipei,Taiwan, Province of China
30 三月 2023
從現在AI的發展速度 不用26世紀經理的職位就可以被取代
lmsm47 级别 16,Guangzhou,China
20 六月 2023
确实
kqhasaki 级别 23,Daxi,Taiwan, Province of China
17 八月 2021
终于到多线程了,《java核心技术》第一卷把它放在最后一章。这块学完之后意味着可以进入下一本书了。
Tom 级别 41,San Jose,Sweden
9 二月 2021
好興奮呀~終於到線程了