搞懂Java线程池

搞懂Java线程池

简介

Java中的线程池是一种常见的并发编程工具,它可以让程序更高效地利用系统资源以及更好地进行线程管理。线程池采用预分配线程的方式,从而避免了线程的频繁创建与销毁,这样可以在一定程度上提升程序的性能。同时,线程池还可以对线程进行池化、回收、重用等操作,从而进一步提升程序的运行效率。

线程池的使用

Java线程池的使用十分简洁,可以分为几个步骤:

  1. 创建线程池,可以通过Executors类提供的静态方法来完成,也可以通过自定义线程池来创建。
  2. 创建一个需要并行执行的任务。
  3. 将任务添加到线程池中。
  4. 执行任务。

下面我们以几个示例来说明Java线程池的使用。

示例1:计算数字和

import java.util.concurrent.ExecutorService;
import java.util.concurrent.Executors;

class CalculateTask implements Runnable {

    private int startNum;
    private int endNum;

    CalculateTask(int startNum, int endNum) {
        this.startNum = startNum;
        this.endNum = endNum;
    }

    public void run() {
        long sum = 0;
        for (int i = startNum; i <= endNum; i++) {
            sum += i;
        }
        System.out.println(Thread.currentThread().getName() + " : " + sum);
    }
}

public class ThreadPoolExample1 {
    public static void main(String[] args) {
        ExecutorService executorService = Executors.newFixedThreadPool(2);
        executorService.execute(new CalculateTask(1, 10));
        executorService.execute(new CalculateTask(11, 20));
        executorService.shutdown();
    }
}

在这个示例中,我们创建了一个简单的任务类CalculateTask,该任务用于计算某个区间内的数字和。使用Executors.newFixedThreadPool(2)方法创建了一个固定大小为2的线程池,随后分别将CalculateTask任务添加到线程池中并执行。

示例2:爬虫

import java.io.IOException;
import java.net.URL;
import java.util.Scanner;
import java.util.concurrent.ExecutorService;
import java.util.concurrent.Executors;

class CrawlerTask implements Runnable {
    private String url;

    CrawlerTask(String url) {
        this.url = url;
    }

    public void run() {
        try {
            String content = new Scanner(new URL(url).openStream(), "UTF-8").useDelimiter("\\A").next();
            System.out.println(Thread.currentThread().getName() + " : " + url);
        } catch (IOException e) {
            System.out.println("Failed to crawl " + url);
        }
    }
}

public class ThreadPoolExample2 {
    public static void main(String[] args) {
        ExecutorService executorService = Executors.newFixedThreadPool(4);
        String[] urls = {"https://www.baidu.com", "https://www.sogou.com", "https://www.google.com", "https://www.bing.com"};
        for (String url : urls) {
            executorService.execute(new CrawlerTask(url));
        }
        executorService.shutdown();
    }
}

在这个示例中,我们创建了一个简单的爬虫任务类CrawlerTask,该任务用于爬取某个网址的内容。使用Executors.newFixedThreadPool(4)方法创建了一个固定大小为4的线程池,随即分别将若干个CrawlerTask任务添加到线程池中并执行。

参考文献

以上介绍的内容只是Java线程池的冰山一角,详情可以参考Java官网关于并发编程指南的相关介绍。

本站文章如无特殊说明,均为本站原创,如若转载,请注明出处:搞懂Java线程池 - Python技术站

(0)
上一篇 2023年5月18日
下一篇 2023年5月18日

相关文章

  • Java编程中字节流与字符流IO操作示例

    下面是“Java编程中字节流与字符流IO操作示例”的完整攻略: 1. 前言 IO(Input/Output,输入输出)是程序中非常重要的一部分,它关乎数据在程序中的读写以及处理。在Java中,IO的对象分为两个大类:字节流和字符流。在进行IO操作时,我们需要根据不同的需求选用字节流或者字符流。本文将详细讲解Java编程中字节流与字符流IO操作示例。 2. 字…

    Java 2023年5月26日
    00
  • JavaWeb实现邮件发送功能

    下面是JavaWeb实现邮件发送功能的完整攻略: 1. 准备工作 首先需要确保在本地或服务器上已经安装了Java环境和JavaMail API。 Java环境的安装可以参考官方文档:https://www.java.com/zh-CN/download/help/download_options.html JavaMail API的下载可以在官方网站上找到:…

    Java 2023年6月16日
    00
  • Java 配置log4j日志文件路径 (附-获取当前类路径的多种操作)

    下面是Java配置log4j日志文件路径的完整攻略。 1. 什么是log4j? log4j是Java开发中非常常用的日志工具,它可以方便地记录系统运行时的各种事件,同时也能够帮我们排查错误。在Java开发中使用log4j可以大大提高我们开发的效率。 2. 配置log4j日志文件路径 2.1 配置log4j.properties log4j的配置文件可以是XM…

    Java 2023年5月20日
    00
  • Maven生命周期和及插件原理用法详解

    Maven生命周期和插件原理用法详解 什么是Maven生命周期? Maven生命周期指的是一些固定的、预定义的构建顺序,Maven通过定义一系列阶段(Phase),每个阶段表示一些特定的任务,它们按照一定的顺序执行,最终完成项目构建。Maven生命周期包括三个阶段:- 清理周期:此周期主要是负责清理相关的上一次构建的内容- 默认周期:此周期是最主要的构建阶段…

    Java 2023年5月20日
    00
  • 深入解析JVM对dll文件和对类的装载过程

    下面我将为您详细讲解“深入解析JVM对dll文件和对类的装载过程”的完整攻略。 简介 Java虚拟机(JVM)是Java程序运行的重要环境,其中包括了对类的装载技术。在Java的运行期间,JVM会将.class文件装载进内存中,而在Windows系统中,则会涉及到装载.dll文件。下面将具体讲解JVM对dll文件和类的装载过程。 DLL文件装载过程 在Win…

    Java 2023年5月26日
    00
  • 软引用的作用是什么?

    软引用是Java语言中的一种引用类型,用于描述一些有用但不必须的对象。在Java中,垃圾回收器在回收时会自动处理所有的软引用对象,但只有在内存空间不足时才会回收这些对象。 使用软引用可以解决一些问题,如内存泄漏、内存占用等问题。下面介绍软引用的使用攻略: 1. 创建软引用对象 在Java中,可以使用java.lang.ref.SoftReference类来创…

    Java 2023年5月10日
    00
  • Android UI设计与开发之使用ViewPager实现欢迎引导页面

    下面是使用ViewPager实现欢迎引导页面的完整攻略: 1. 准备工作 在开始实现之前需要进行一些准备工作: 在Android studio中创建一个新项目。 在app目录下的build.gradle文件中添加以下依赖: implementation ‘androidx.viewpager2:viewpager2:1.0.0’ 创建一个初始的欢迎引导布局文…

    Java 2023年6月1日
    00
  • SpringBoot中打war包需要注意事项

    SpringBoot中打war包需要注意的事项 SpringBoot默认情况下是以jar包形式运行的,如果需要将SpringBoot项目部署到Web容器中,就需要将项目打成war包。下面是几个需要注意的事项: (1)修改项目的打包方式 在pom.xml文件中,将项目打包方式设置为war,并且去掉spring-boot-starter-web依赖的scope,…

    Java 2023年5月20日
    00
合作推广
合作推广
分享本页
返回顶部