多线程是Java中最复杂和最强大的部分多线程章节是Java中最难理解和使用的章节。遗憾的是,没有多少资源可以为您提供所有答案。同时,并发知识也很重要。在本文中,我解释了每个Java开发人员都必须知道的多线程的核心方面。这部分,我们从Thread和Runnable的话题开始。为什么并发知识如此重要?没有良好的多线程知识,您将无法获得高级Java工作。多线程知识几乎肯定是高级Java职位面试的主题。如果对多线程没有清晰的认识,无论有没有实践经验,您都可能会失败。几乎每个生产应用程序都使用多线程范例。在实际项目中,您将使用应用程序服务器或其替代品。它们都是基于像线程池这样的多线程解决方案。在它之上的任何适当的实现都需要并发一致性。ThreadsandRunnablesDefinition多线程是基于Thread和Runnable。Thread是一个类,它启动一个新的独立活动并执行Runnable提供的指令。线程是依附于操作系统的一个实体,所以这就是为什么它是一个沉重的类。Runnable也只是一组指令——所以这就是它轻量级的原因。如何执行新线程线程可以使用Run()方法在当前运行的线程内执行指令。为了在新活动中运行指令,Thread提供了Start()方法。如何重用线程一个线程中可以有许多可运行的任务。这是一篇更详细的文章。在这里您可以看到一个非常简短的示例,其中许多可运行对象(任务)在一个线程中运行:如何停止线程您不能只是停止()或暂停()一个线程。这些方法已弃用。您必须注意使用isAlive()或isInterrupted()线程的中断设计,守护线程可以是守护进程。即使最后一部分不执行,守护线程也会立即被中断。所以这样的线程可以附加到资源上。否则,它们可能是资源或/和内存泄漏的原因。如何使用线程池只要Thread实例很重,使用ThreadPool类重用同一个Thread是有意义的。您可以根据线程使用不同的ThreadPool实现。固定线程池FixedThreadPool是一个具有预定义线程数的简单池。线程数在此期间不会改变。使用它是有意义的:缓存线程池与固定线程池相反,它可以在添加更多任务时动态增加线程数。每个新创建的线程在使用时将处于活动状态,否则将在空闲60秒后被删除。如何定义线程池中的线程数为了为您的应用程序使用最好的线程池,您需要了解以下内容:如果您的线程进行繁重的计算,例如视频渲染、加密等,那么它将吃掉线程运行过程。如果您的线程独立于CPU活动(例如网络调用、内存调用等)运行,则它不会消耗CPU来运行其线程。根据这些知识,您可能会得出结论,具有高CPU消耗的任务不会分配比CPU内核更多的线程。对于CPU密集度较低的任务,您可以拥有比CPU内核更多的线程(但比例视情况而定)。结论:本文只强调了线程、可运行对象和线程池的概念的主要内容,但并未涵盖所有内容。还有很多方面可能会发挥重要作用。我希望你喜欢我使用的信息图表。如果您认为我遗漏了与此主题相关的重要内容,请留下您的反馈。感谢您的阅读!*原文链接:https://dzone.com/articles/what-every-java-dev-should-know-thread-runnable-thread-pool
