随笔分类 -  Java

Java进阶:ArrayList线程安全问题详解
摘要:概述 ArrayList 是线程不安全的集合类,当多线程环境下,并发对同一个ArrayList执行add,可能会抛出java.util.ConcurrentModificationException的异常 例子 这边有个简单的程序,创建30个线程,分别对ArrayList执行add操作 public 阅读全文
posted @ 2020-09-17 22:41 风停了,雨来了 阅读(2554) 评论(0) 推荐(1)
Java进阶:CAS原理详解
摘要:概述 CAS是Compare And Swap的简称,即:比较并交换Java中常见的是Atomic相关类使用了CAS,例如:AtomicInteger、AtomicBoolean等等实现CAS的底层用的是Unsafe操作类 先看个小例子 public static void main(String[ 阅读全文
posted @ 2020-09-17 16:48 风停了,雨来了 阅读(544) 评论(0) 推荐(0)
Java类AtomicReference详解
摘要:前言 Atomic家族主要是保证多线程环境下的原子性,相比synchronized而言更加轻量级。比较常用的是AtomicInteger,作用是对Integer类型操作的封装,而AtomicReference作用是对普通对象的封装。 对AtomicInteger原子性不了解的,可以看这篇:volat 阅读全文
posted @ 2020-09-17 10:52 风停了,雨来了 阅读(26665) 评论(0) 推荐(4)
Java注解之@CallerSensitive
摘要:前言 有一天在看Unsafe.getUnsafe()源码时,发现该方法上有一个@CallerSensitive注解。类似的,在Class.forName方法也有该注解。它们的源码分别如下: @CallerSensitive public static Unsafe getUnsafe() { Cla 阅读全文
posted @ 2020-09-17 09:56 风停了,雨来了 阅读(4751) 评论(0) 推荐(3)
Java进阶:volatile使用详解
摘要:概述 volatile是Java提供的轻量级的同步机制,保证了可见性,不保证原子性。 了解volatile工作机制,首先要对Java内存模型(JMM)有初步的认识: 每个线程创建时,JVM会为其创建一份私有的工作内存(栈空间),不同线程的工作内存之间不能直接互相访问JMM规定所有的变量都存在主内存, 阅读全文
posted @ 2020-09-16 17:56 风停了,雨来了 阅读(2815) 评论(0) 推荐(0)
Java根据enum某个属性值获取枚举项
摘要:现有如下枚举,假设需要找出status=3的枚举项 public enum StatusEnum { DRAFT(1, "草稿"), CHECKING(2, "审核中"), REFUSE(3, "退回"), FINISH(4, "结束"); private Integer status; priva 阅读全文
posted @ 2020-09-11 18:07 风停了,雨来了 阅读(7518) 评论(0) 推荐(0)
Java使用stream将List转为Map
摘要:需求 从List对象列表提取2个字段,分别作为Map的key-value 实现 public static void main( String[] args ) { ArrayList<Person> list = new ArrayList<>(); list.add(new Person(1," 阅读全文
posted @ 2020-09-11 14:13 风停了,雨来了 阅读(2016) 评论(0) 推荐(0)
Java常用数据类型之间转换
摘要:String和Integer Integer 转 String //使用toString(),必须保证Integer对象不是null,否则会抛出NullPointerException异常 Integer i = 1; String s = i.toString(); //使用Integer.toS 阅读全文
posted @ 2020-09-11 11:19 风停了,雨来了 阅读(232) 评论(0) 推荐(0)
Java运行报错NoClassDefFoundError: com/fasterxml/jackson/databind/JsonNode的解决方案
摘要:引入如下依赖即可: <dependency> <groupId>com.fasterxml.jackson.core</groupId> <artifactId>jackson-databind</artifactId> <version>2.9.5</version> </dependency> 阅读全文
posted @ 2020-09-02 17:27 风停了,雨来了 阅读(4007) 评论(0) 推荐(0)
Spring AOP讲解(Pointcut、Before、Around、AfterReturning、After)
摘要:AOP依赖 <dependency> <groupId>org.springframework.boot</groupId> <artifactId>spring-boot-starter-aop</artifactId> </dependency> @Pointcut 定义切入点,有以下2种方式: 阅读全文
posted @ 2020-08-24 16:27 风停了,雨来了 阅读(7810) 评论(1) 推荐(1)
Java8使用stream对List列表分组
摘要:定义实体类 public class Person { public Integer id; public String name; public Integer age; public Person(){} public Person(Integer id, Integer age, String 阅读全文
posted @ 2020-08-18 15:07 风停了,雨来了 阅读(13498) 评论(0) 推荐(0)