何时使用Java线程API

5

个人而言,我使用高级并发抽象因为它们更容易。实际上,我已经记不起上次使用线程是什么时候了。但在技术面试中,这是一个经常被问到的问题。是的,我也会问关于它的问题。

是否存在某些用例需要使用低级别的Thread API而不是Executors/Locks/Latches等?

在技术面试中讨论低级别的线程API是否有任何原因?


2
也许他们仍在使用1.4版本,这些抽象可能不可用?令人担忧,但有可能。 - Kevin D
2个回答

4

技术面试通常旨在衡量候选人的知识深度,而不是特定能力。可以说,在过去的15到20年中,没有必要实现自己的链表和二叉树,然而在技术面试中经常会出现要求实现这些数据结构的问题。聪明的候选人应该能够从简短的教程和API文档中找出高级并发API。询问线程原语是为了看看候选人是否理解使用并发时背后发生的事情,无论调用什么API。

个人而言,当我问关于你永远不会使用的东西的问题时,我不坚持获得正确的名称或API方法参数的正确顺序。只要候选人清楚概念,我不介意他们不记得具体API的细节。


有什么理由要遍历 join、wait、notify、notifyAll 这些东西吗? - Mairbek Khadikov
1
@MairbekKhadikov 我会简要地浏览一遍它们,只是为了看看候选人是否大致理解它们的作用,而不涉及如何正确调用它们的细节。例如,我会问“notify和notifyAll之间有什么区别”,而不是“展示如何调用notify”。 - Sergey Kalinichenko

1

如果你想要实现某些非常具体的功能,但却被遗留代码、旧版本的Java或者缺少提供的抽象所束缚,那么我建议使用原始的低级别线程API。即使在使用旧版本/遗留代码时,请记住,如果切换到较新的API可以降低维护成本,那么这样做可能是值得的 - 就个人而言,我尽量将用户生成的并发代码的数量保持在最低限度!


网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接