每个Java开发人员应该知道的关于线程、可运行线程和线程池的知识

关于Java中线程、Runnable和线程池概念的最重要的信息,带有清晰的例子、信息图表和解释。

多线程是Java中最复杂也是最大的部分

多线程章节是Java中最难理解和使用的。不幸的是,没有那么多的来源可以让你得到所有的答案。同时,并发知识非常重要。在本文中,我解释了每个Java开发人员都必须知道的多线程的核心方面。在这一部分,我们从线程和Runnable主题开始。

为什么并发知识如此关键?

没有好的多线程知识,你不可能得到高级Java工作

多线程知识几乎肯定是高级Java职位面试的主题。无论有没有实践经验,如果没有对多线程的清晰理解,您很可能会失败。

几乎每个生产应用程序都使用多线程范例

在实际项目中,您将使用应用服务器或它们的替代品。所有这些都基于多线程解决方案,如线程池等。任何适当的实现都需要并发一致性。

线程和可运行的定义

多线程是基于线程和可运行的。Thread是一个启动新的独立活动并执行Runnable提供的指令的类。

线程是一个附属于操作系统的实体,这就是为什么它是一个很重的类。同时,Runnable只是一组指令——这就是它轻量级的原因。

如何执行新线程

线程可以通过使用Run()方法。为了在新的活动中运行指令,Thread提供了Start()方法。

(new Thread()).run(); // run in current thread
(new Thread()).start(); // run in new thread

如何重用线程

线程可以在其内部执行许多runnables。这里有一篇更详细的文章。在这里,您可以看到一个非常简短的示例,其中许多runnables(任务)在一个线程中运行:

List<Runnable> tasks = new ArrayList<Runnable>();
(new Thread(() -> {
  for (Runnable task : tasks) {
    task.run();
  }
})).start();

如何停止线程

你不能就这样stop()或者suspend()线程。这些方法已被否决。你必须注意使用中断设计isAlive()或者isInterrupted()

(new Thread(() -> {
    while(true){
      // process a peace of logic
      if(Thread.currentThread().isInterrupted()){
        //handle exiting
        break;
      }
    }
})).start();

线程守护程序

线程可以是守护进程。守护线程会立即中断,即使最后一部分不会被执行。所以这样的线程可以附加到资源上。否则,它们可能是资源或/和内存泄漏的原因。

Thread thread = (new Thread(() -> {
    try {
      // working with resource
    } finally {
      // resource.close(); - might won't work because finally if
      // deamon been interrupted
    }
}));
thread.setDaemon(true);
thread.start();

如何使用线程池

只要线程实例很重,使用ThreadPool类重用同一个线程是有意义的。根据您的线程,您可以使用不同的线程池实现。

固定线程池

FixedThreadPool是一个简单的池,具有预定义数量的线程。期间线程数不会改变。使用它是有意义的:

缓存线程池

与固定线程池相反,这种池可以在增加更多任务时动态增加线程数量。每个新创建的线程在使用时都是活动的,否则在空闲60秒后就会被删除。

如何定义线程池中的线程数量

为了将最佳线程池用于您的应用程序,您需要了解以下事项:

  • 如果你的线程做大量的计算,比如视频渲染,加密等等。,那么它会吃掉运行该线程的进程。
  • 如果您的线程运行与CPU活动无关,如网络调用、内存调用等。,那么它就不会消耗运行它线程的CPU。

根据这些知识,你可能会得出以下结论:

  • 具有高CPU消耗的任务不要分配比CPU核心更多的线程

  • 在低CPU消耗任务中,线程数量可以多于CPU内核数量(但比例取决于具体情况)。

结论

本文只强调了线程、可运行线程和线程池概念的主要内容,但并没有涵盖全部内容。仍有许多方面可能发挥重要作用。

感谢阅读,点赞收藏+关注!资料已经给大家整理好了,更多的java课程学习路线,笔记,面试等架构资料,想要学习的同学可以私信作者“学习”

 

 

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值