Java踩坑记系列之线程池

Java踩坑记系列之线程池

Java系列 4年前 (2020-02-16) 浏览: 4920 评论: 2

线程池大家都很熟悉,无论是平时的业务开发还是框架中间件都会用到,大部分都是基于JDK线程池ThreadPoolExecutor做的封装,比如tomcat的线程池,当然也有单独开发的,但都会牵涉到这几个核心参数的设置:核心线程数,等待队列,最大线程数,拒绝策略等。 先说下我们项目组在使用线程池时踩到的坑: 线程池的参数设置一定要结合具体的业务场景,区分I/O密集和CPU密集,如果是I/O密集型业务,

Java 17的一些新特性

Java 17的一些新特性

Java系列 2年前 (2022-03-07) 浏览: 478 评论: 2

Java17将是一个长期支持的LTS版本。 您一定知道Java采用了6个月的发布周期。也就是说,它将每6个月发布一个新版本的Java。每隔3年,LTS版本就会发布一次。目前,Java 11是LTS版本,于2018年9月发布。但在Java17发布后,它将是最新的LTS支持。 许多组织依赖LTS版本,所以他们使用的是Java11。但在Java17发布后,他们将使用Java17(可能)。 自从将Java

使用方法引用简化Java中的函数式编程

使用方法引用简化Java中的函数式编程

Java系列 2年前 (2021-12-13) 浏览: 503 评论: 1

与lambdas一起,JavaSE8将方法引用引入Java语言。本文简要概述Java中的方法引用,然后通过Java代码示例开始使用它们。在本文结束时,你将了解如何使用方法引用引用类的静态方法、绑定和未绑定的非静态方法以及构造函数,以及如何使用它们引用超类和当前类类型中的实例方法。文还将了解为什么许多Java开发人员采用lambda表达式和方法引用作为匿名类的更干净、更简单的替代方案。 方法引用 有

Spring Boot使用GraphQL入门

Spring Boot使用GraphQL入门

Java系列 3年前 (2021-10-31) 浏览: 3289 评论: 1

GraphQL是来自Facebook的一个相对较新的概念,被宣传为RESTforWebAPI的替代品。 本文将介绍如何使用Spring Boot设置GraphQL服务器,以便将其添加到现有应用程序或用于新应用程序。 什么是GraphQL? 传统的RESTAPI使用服务器管理的资源概念。这些资源可以按照各种HTTP谓词以一些标准方式进行操作。只要我们的API符合资源概念,它就可以很好地工作,但当我们

一文带你彻底了解Java异步编程

一文带你彻底了解Java异步编程

Java系列 4年前 (2020-10-13) 浏览: 1372 评论: 0

随着RxJava、Reactor等异步框架的流行,异步编程受到了越来越多的关注,尤其是在IO密集型的业务场景中,相比传统的同步开发模式,异步编程的优势越来越明显。 那到底什么是异步编程?异步化真正的好处又是什么?如何选择适合自己团队的异步技术?在实施异步框架落地的过程中有哪些需要注意的地方? 本文从以下几个方面结合真实项目异步改造经验对异步编程进行分析,希望能给大家一些客观认识: 使用RxJava

Java9新特性系列-模块化

Java9新特性系列-模块化

Java系列 3年前 (2021-01-24) 浏览: 606 评论: 0

通过学习如何从命令行创建、编译和执行单模块和多模块项目,让您了解Java9的模块化。 (在本文中,我们将介绍Java平台模块系统(JPMS),这是Java9版本中最大的变化。在本文中,我们将看一看JPMS的一些基础知识(为什么我们需要模块?JDK中发生了什么变化?)。之后,我们将了解如何创建、编译和执行单个模块的应用程序。最后,我们将了解如何创建、编译和执行多模块应用程序。在本文中,我们将只使用命

在Java中管理环境变量

在Java中管理环境变量

Java系列 3年前 (2021-02-26) 浏览: 471 评论: 0

介绍 变量被命名为内存位置。它们的值保存在内存中,我们通常记不起来,因为它们对人类不友好,而且会四处移动。不过,如果我们命名内存位置,比如a,就更容易记住。 环境变量与通常的编程变量非常相似,只是它们被设置在程序之外的某个地方。它可以被操作系统、JVM、我们的程序正在使用的微服务等使用。 更准确地说,它们是键/值对,其中键是可以被认为是环境变量的名称,值是,嗯,值。它们的值总是字符串。 当人们提到

字节码修改工具Javasisst简介

字节码修改工具Javasisst简介

Java系列 3年前 (2021-08-18) 浏览: 778 评论: 0

在本文中,我们将研究Javasisst(http://www.javassist.org/)库。 简单地说,这个库通过使用高级API比JDK中的API更简单地操作Java字节码。 Maven依赖 要将Javassist库添加到我们的项目中,我们需要将Javassist添加到pom中: <dependency> <groupId>org.javassist</group

Java17快多少?

Java17快多少?

Java系列 2年前 (2021-11-02) 浏览: 771 评论: 0

Java17附带了许多新特性和增强功能。然而,其中大多数都需要代码更改才能从中受益。除了性能。只需切换JDK安装,您就可以获得免费的性能提升。但是提升多少?值得吗?让我们通过比较JDK17、JDK16和JDK11的基准来找出答案。 基准方法 硬件:一台稳定的机器,无需运行任何其他要求计算的进程,具有Intel®Xeon®Silver 4116@2.1 GHz(总共12核/24线程)和128 GiB

Java中线程的生命周期

Java中线程的生命周期

Java系列 2年前 (2022-06-06) 浏览: 239 评论: 0

在本文中,我们将详细讨论Java中的一个核心概念——线程的生命周期。 我们将使用一个快速的图解,当然还有实用的代码片段来更好地理解线程执行期间的这些状态。 Java多线程 在Java语言中,多线程是由线程的核心概念驱动的。线程在其生命周期中会经历各种状态: Java中线程的生命周期 java.lang.Thread类包含一个静态枚举,它定义了它的潜在状态。在任何给定的时间点内,线程只能处于以下状态

使用JUnit5实现测试并行化

使用JUnit5实现测试并行化

Java系列 4个月前 (12-25) 浏览: 138 评论: 0

按顺序运行测试似乎是Java社区的现状,尽管现在我们的计算机有很多CPU内核。另一方面,并行执行所有这些项目在纸面上可能看起来很棒,但说起来往往容易做起来难,尤其是在已经存在的项目中。 在5.3版本中,JUnit框架引入了对并行测试执行的实验支持,这可以允许由代码驱动的选择性测试并行化。我想提出一个实用的解决方案,它应该适用于许多类型的项目,而不是对该功能进行详尽的概述(官方用户指南在这里做得很好

Java在线诊断利器之Arthas

Java在线诊断利器之Arthas

Java系列 4年前 (2020-02-13) 浏览: 4806 评论: 0

一. 简介 Arthas是阿里在2019年9月份开源的一款java在线诊断工具,能够分析、诊断、定位java应用问题,例如:jvm信息、线程信息、搜索类中的方法、 跟踪代码执行、观测方法的入参和返回参数等等。 Arthas最大的特点是能在不修改代码和不需要重新发布的情况下,对业务问题进行诊断,包括查看方法调用的出参入参、异常、监测方法执行耗时、类加载信息等,大大提升线上问题排查效率。 二. 适用场

Java反射有什么用?

Java反射有什么用?

Java系列 4年前 (2020-10-21) 浏览: 207 评论: 0

反射概述 在本文中,我们将探讨Java反射,它允许我们检查或修改类、接口、字段和方法的运行时属性。当我们在编译时不知道它们的名称时,这尤其有用。 此外,我们可以实例化新对象、调用方法以及使用反射获取或设置字段值。 反射项目设置 要使用Java反射,我们不需要包括任何特殊的jar、任何特殊的配置或Maven依赖项。JDK附带了一组绑定在java.lang.reflect专门针对此目的的包装。 因此,

Java10新特性一览

Java10新特性一览

Java系列 3年前 (2021-02-05) 浏览: 199 评论: 0

Java10是Java版本23年历史上最快的版本。Java因其缓慢的增长和进化而受到批评,但Java10打破了这一概念。Java10是一个具有许多未来变化的版本,其范围和影响可能并不明显,但却很牵强。 在本文中,我们将讨论Java10发行版中添加的各种特性。在此之前,让我们回顾一下java发布模型中引入的一些更改。 长期支持模式 从2017年开始,Oracle&Java社区宣布将向为期6个

Java9 Reactive Stream反应流式编程

Java9 Reactive Stream反应流式编程

Java系列 3年前 (2021-04-19) 浏览: 447 评论: 0

在本文中,我们将研究Java9反应流Reactive Streams。简单地说,我们将能够使用Flow类,它包含用于构建反应流处理逻辑的主要构建块。 反应流是具有非阻塞背压的异步流处理的标准。这个规范在Reactive Manifesto中定义,有各种各样的实现,例如RxJava或Akka Streams。 反应式API概述 为了构建一个流,我们可以使用三个主要的抽象,并将它们组合成异步处理逻辑。

使用Byte Buddy开发Java agent功能

使用Byte Buddy开发Java agent功能

Java系列 3年前 (2021-09-21) 浏览: 2608 评论: 0

虽然Java初学者很快就学会了键入public static void main来运行他们的应用程序,但即使是经验丰富的开发人员也常常不知道JVM对Java进程的另外两个入口点的支持:premain和agentmain方法。这两种方法都允许所谓的Java代理在驻留在自己的jar文件中时对现有Java程序作出贡献,即使主应用程序没有显式链接。这样,就可以完全独立于承载Java代理的应用程序开发、发布

Java 8–使用Lambda表达式进行比较

Java 8–使用Lambda表达式进行比较

Java系列 2年前 (2022-01-26) 浏览: 1252 评论: 0

在Java 8之前,对集合进行排序需要为排序中使用的比较器Comparator创建一个匿名内部类: new Comparator<Human>() { @Override public int compare(Human h1, Human h2) { return h1.getName().compareTo(h2.getName()); } } 这仅用于对Human实体列表进行排序

实现Runnable还是扩展Thread类?

实现Runnable还是扩展Thread类?

Java系列 2年前 (2022-07-19) 浏览: 294 评论: 0

“我应该实现Runnable还是扩展Thread类?”这是一个很常见的问题。 在本文中,我们将看到哪种方法在实践中更有意义以及为什么。 使用Thread 我们首先定义一个扩展线程Thread的SimpleThread类: public class SimpleThread extends Thread { private String message; // standard logger, co

Java内存模型-永久代PermGen和元空间Metaspace

Java内存模型-永久代PermGen和元空间Metaspace

Java系列 4年前 (2020-09-28) 浏览: 529 评论: 0

一. JVM内存模型 根据JVM规范,JVM内存分为五个部分:虚拟机堆栈、堆、方法区、程序计数器和本地方法堆栈。 虚拟机堆栈:每个线程都有一个私有堆栈,该堆栈在创建线程时创建。堆栈内部是一种称为“堆栈帧”的东西。每个方法将创建一个堆栈帧。堆栈帧存储局部变量表(基本数据类型和对象引用)、操作数堆栈、方法退出和其他信息。堆栈的大小可以固定,也可以动态扩展。当堆栈调用深度大于JVM允许的范围时,将抛出s

Java反射API详解

Java反射API详解

Java系列 4年前 (2020-11-01) 浏览: 477 评论: 0

Java反射API,位于java.lang.reflect包。顾名思义,反射是类或对象检查自身的能力。反射允许Java代码查看对象(更准确地说,对象的类)并确定其结构。在安全管理器所施加的限制内,您可以找出一个类有哪些构造函数、方法和字段,以及它们的属性。您甚至可以更改字段的值、动态调用方法和构造新对象,就像Java有指向变量和方法的原始指针一样。您可以对代码从未见过的对象执行所有这些操作。ann

登录

忘记密码 ?

切换登录

注册