167 天前 / luoxn28
戳蓝字「TopCoder」关注我们哦! 编者注:当需要阻塞或唤醒一个线程的时候,JVM 都会使用 LockSupport 工具类来完成相应工作。LockSupport 定义了一组的公共静态方法,这些方法提供了最基本的线程阻塞和唤醒功能,而 LockSupport 也被称为构建同步组件的基础工具。 Java 并发组件和并发工具类如下: 并发组件:线程池、阻塞队列、Future 和 FutureTask、Lock 和 Condition。 并发工具:CountDownLatch、CyclicBarrier、Semaphore 和 Exchanger。
170 天前 / 博文视点Broadview
本文作者知秋,节选自《Java 编程方法论:响应式 Spring Reactor 3 设计与实现》一书。专享福利 文末可免费获取知秋老师提供的 “国外知名 Java 开发者分享视频(中文字幕)”** 学习资源。 最近几年,随着 Go、Node 等新语言、新技术的出现,Java 作为服务器端开发语言老大的地位受到了不小的挑战。虽然 Java 的市场地位在短时间内并不会发生改变,但 Java 社区还是将挑战视为机遇,并努力、不断地提高自身应对高并发服务器端开发场景的能力。
170 天前 / 成富
对于一个 Java 应用,如果要部署到 Kubernetes,首先需要创建一个容器镜像。这其实由两个步骤组成: 构建 Java 源代码,并打包成 JAR 文件。 把 JAR 文件和 JDK 组合在一起,创建出容器镜像。 在一般的构建过程中,这两个步骤是分开的。第一步由本地机器上的 Maven 或 Gradle 来完成,第二步使用 Docker 命令从Dockerfile中创建出镜像,并使用第一步构建出的本地 JAR 文件。 当需要使用某些公开容器镜像注册表(如 Docker Hub 和 Quay.io)提供的持续集成功能时,就不能再分成两个步骤,因为这些注册表只支持构建容器镜像,并没有提供应用构建的支持。
171 天前 / 沉默王二
之前已经详细、全面地介绍了 Log4j,相信小伙伴们已经完全掌握了。那我在读嵩山版的阿里巴巴开发手册(没有的小伙伴,记着找我要)的时候,就发现了一条「强制」性质的日志规约: 应用中不可以直接使用日志系统(Log4j、Logback)中的 API,而应该使用日志框架中的 API,比如说 SLF4J,使用门面模式的日志框架,有利于维护和统一各个类的日志处理方式。 (为什么我把这段文字手敲了下来呢,因为我发现阿里巴巴开发手册上的有语病,瞧下面红色标出的部分) (维护和统一,把统一放在最后面读起来真的是别扭,和的有点牵强...
171 天前 / 未读代码
可以点击“未读代码” ,关注公众号,文章每周更新 杭州 - 梦想小镇 最近在看一个同学代码的时候,发现代码中大量使用了 Google 开源的 Guava 核心库中的内容,让代码简单清晰了不少,故学习分享出 Guava 中我认为最实用的功能。 Guava 项目是 Google 公司开源的 Java 核心库,它主要是包含一些在 Java 开发中经常使用到的功能,如数据校验、不可变集合、计数集合,集合增强操作、I/O、缓存、字符串操作等。并且 Guava 广泛用于 Google 内部的 Java 项目中,也被其他公司广泛使用,甚至在新版 JDK 中直接引入了 Guava 中的优秀类库,所以质量毋庸置疑。
172 天前 / 一猿小讲
1 这些异常你是否还记得?正式开讲之前,先罗列一下所知的 OutOfMemoryError (简称 OOM)异常,看看这些异常工作中你是否也遇到过? Java 堆内存溢出:java.lang.OutOfMemoryError: Java heap space 垃圾回收内存溢出:java.lang.OutOfMemoryError:GC overhead limit exceeded 方法区溢出:java.lang.OutOfMemoryError: PermGen space Metaspace 内存溢出:java.lang.OutOfMemoryError:Metaspace 直接内存内存溢出:java.lang.OutOfMemoryError: Direct buffer memory 栈内存溢出:java.lang.StackOverflowError 创建本地线程内存溢出:java.lang.OutOfMe...
172 天前 / 浪客书心
(给 ImportNew 加星标,提高 Java 技能) 作者:科技缪缪(本文来自作者投稿) 1. 说说 JVM 的内存布局? Java 虚拟机主要包含几个区域: 堆:堆是 Java 虚拟机中最大的一块内存,是线程共享的内存区域,基本上所有的对象实例数组都是在堆上分配空间。堆区细分为 Young区年轻代和 Old 区老年代,其中年轻代又分为 Eden、S0、S1 3 个部分,他们默认的比例是 8:1:1 的大小。 栈:栈是线程私有的内存区域,每个方法执行的时候都会在栈创建一个栈帧,方法的调用过程就对应着栈的入栈和出栈的过程。
172 天前 / 爱笑的架构师
ThreadLocal 使用不规范,师傅两行泪组内来了一个实习生,看这小伙子春光满面、精神抖擞、头发微少,我心头一喜:绝对是个潜力股。于是我找经理申请亲自来带他,为了帮助小伙子快速成长,我给他分了一个需求,这不需求刚上线几天就出网上问题了后台监控服务发现内存一直在缓慢上升,初步怀疑是内存泄露。 把实习生的 PR 都找出来仔细 review,果然发现问题了。由于公司内部代码是保密的,这里简单写一个 demo 还原场景(忽略代码风格问题)。 publicclassThreadPoolDemo{ privatestaticfinalThreadPoolExecutorpoolExecutor=newThreadPoolExecutor(5,5,1,...
173 天前 / 小姐姐味道
不羡鸳鸯不羡仙,一行代码调半天。原创:小姐姐味道(微信公众号 ID:xjjdog),欢迎分享,转载请保留出处。 这里的 cas 不是 Java 并发包中的 CAS,做过单点登录(SSO)的同学应该对它不会陌生。这个玩意太古老了,而且生态非常庞大,以至于我现在想起它都心有余悸。很长一段时间,做单点登录,或多或少都要参考 CAS,这让人很头痛。 当然,我们有另外一个选择:keycloak,它是 jboss 出品的。凡是 jboss 出品的东西,都出奇的重,keycloak 也不例外,涵盖了权限认证的各种场景的功能。这也是可以理解的,毕竟认证是个又脏又累的活,封装好它很不容易。
173 天前 / Joinncat
作为一名程序员,我们要避免重复发明轮子,尽可能使用一些成熟、优秀、稳定的的第三方库,站在巨人的肩膀上搭建可靠、稳定的系统。本篇我整理了 Java 开发人员经常会使用到的第三方类库,可能不是很全面,还在持续收集整理中,朋友们可以关注我的 GitHub 上的持续更新,GitHub 搜 wind7rui/Javalib,或者点击链接 https://github.com/wind7rui/Javalib,然后点击 watch/Star/Fork,如果您对项目中的内容有建议或者意见,欢迎提出专业方面的建议,共同维护,请直接在 GitHub 上以 issue 或者 PR 的形式提出,以下我们开始本篇的内容。
174 天前 / 成富
Apache Maven 是一个常用的 Java 构建工具。在日常的开发中通常不会关注 Maven 命令的参数。但在持续集成时,有些命令行参数很重要。下面对 Maven 3.6.3的常用命令行参数进行介绍。 -B或--batch-mode 该参数可以启用 Maven 的批处理模式。在批处理模式中,Maven 不会显示下载相关的信息,也不会为输出的信息添加颜色。 在批处理模式下,Maven 的执行性能会有所提升。在持续集成时,推荐使用-B选项。 -D 该参数用来定义系统属性,最常见的用法是通过-DskipTests来跳过测试。 -e或--errors 输出错误的详细信息。
174 天前 / luoxn28
戳蓝字「TopCoder」关注我们哦! 编者注:Thread.interrupt 的出现提供了一个让线程 run 方法主动退出的机制,因为强制的让一个线程被动的退出是很不安全的,内部的数据不一致会对程序造成不可预知的后果。 Thread.interrupt 是 Java 线程的中断机制,每个线程都有一个中断状态(boolean 类型的标识),java.lang.Thread 类提供了几个方法来操作这个中断状态,这些 (native)方法包括: 注意:Java 中断机制是一种协作机制,也就是说通过中断并不能直接终止另一个线程,而需要被中断的线程自己处理中断。
174 天前 / YourBatman
点击上方“BAT 的乌托邦”,选择“设为星标” 后台回复“专栏”,开启专栏模式学习 前言你好,我是 YourBatman。又一年 1024 程序员节,你快乐吗?还是在加班上线呢? 上篇文章介绍了 Validator 校验器的五大核心组件,在结合前面几篇所讲,相信你对 Bean Validation 已有了一个整体认识了。 本文将「非常实用」,因为将要讲述的是 Bean Validation 在 4 个层级上的验证方式,它将覆盖你使用过程中的方方面面,不信你看。 版本约定 Bean Validation 版本:2.0.2Hibernate Validator 版本:6.1.5.Final正文 Jakarta Bean 它的验证约束是通过声明式方式(注...
174 天前 / 知了一笑
一、基础概念 1、面向对象概念 面向对象编程的主要思想是把构成问题的各个事务分解成各个对象,建立对象的目的不是为了完成一个步骤,而是为了描叙一个事物在整个解决问题的步骤中的行为。 2、类和对象 对象:真实存在唯一的事物;在应用程序中对象是数据和动作的结合体,不仅能够进行操作,同时还能够记录下操作结果。 类:抽象的概念,实际就是对某种类型事物的共性属性与行为的抽取;例如 User『名称。年龄。性别』类用来描述用户的基础信息。
175 天前 / 美团技术团队
总第 417 篇 2020 年 第 41 篇 跟其他常见的编程语言不同,Java 将编译过程分成了两个部分,这就对性能带来了一定的影响。而即时(Just In Time, JIT)编译器能够提高 Java 程序的运行速度。本文会先解析一下即时编译器的原理,然后再分享一些在美团实践的经验,希望能对大家有所帮助或者启发。一、导读 常见的编译型语言如 C++,通常会把代码直接编译成 CPU 所能理解的机器码来运行。而 Java 为了实现“一次编译,处处运行”的特性,把编译的过程分成两部分,首先它会先由 javac 编译成通用的中间形式——字节码...