![](https://img-blog.csdnimg.cn/20201017223906684.jpg?x-oss-process=image/resize,m_fixed,h_224,w_224)
java
文章平均质量分 64
java知识
狗狗大蛇
学无止境,进无止步!
展开
-
CompletableFuture多线程聚合结果示例
在Java 8中, 新增加了一个包含50个方法左右的类: CompletableFuture,结合了Future的优点,提供了非常强大的Future的扩展功能,可以帮助我们简化异步编程的复杂性,提供了函数式编程的能力,可以通过回调的方式处理计算结果,并且提供了转换和组合CompletableFuture的方法。异步编程意味着在主线程之外创建一个独立的线程,与主线程分隔开,并在上面运行一个非阻塞的任务,然后通知主线程进展,成功或者失败。使用这种并行方式,极大地提升了程序的表现。原创 2023-10-31 10:25:38 · 253 阅读 · 0 评论 -
代码重构技巧总结
重构-改善既有代码的设计何为重构:在对软件内部结构的一种调整,目的是在不改变软件可观察行为的前提下,提高其可理解性,降低其修改成本。为何重构:代码结构的流失是有累积性的,如果开始就很难看出代码所表达的设计意图,那么后续的人就越难保护好其中的设计,就会导致越改越腐 败的结果。所以,重构不仅可以让代码维持自己该有的形态和行...原创 2021-03-20 19:19:15 · 526 阅读 · 0 评论 -
OOM问题排查思路与常用指令
OOM问题排查思路与指令实际生产项目中,不可避免的会遇到服务器内存不足引发告警的问题,很多时候可能就是因为部署的服务占用了太多的内存导致的。当然,我们可以通过设置java的内存参数来控制内存的最大占用量,但是JVM内存不足了也是一个很头疼的问题。如果服务部署的时候,允许外部内存检查等VM之类的工具远程连接还好,但是很多公司出于性能等种种原因,并不会开放远程连接的功能。这样的话,就只能通过指令来定位问题了!常用指令:1.top指令:类似windows环境的任务管理器,可..原创 2021-01-17 15:18:15 · 3337 阅读 · 0 评论 -
JMM图解
1.jmm介绍原创 2021-01-10 20:17:40 · 167 阅读 · 0 评论 -
Java中synchronize与ReentrantLock两种锁特点介绍
一、两种锁特性总览:synchronize:隐式锁(内置锁),重量级锁,重入锁,非公平锁;ReentrantLock:显式锁,轻量级锁,重入锁,具有公平锁和非公平锁两种方式;二、锁特点介绍:2.1 隐式和显式隐式锁:程序能够自动获取锁和释放锁,无需手动创建和删除,在非逻辑问题的情况下,是不会出现死锁问题的。synchronize修饰普通方法:public synchronized void method() { }synchronize修饰静态方法:pub...原创 2021-01-07 11:48:22 · 373 阅读 · 0 评论 -
Linux离线安装java8的环境
linux安装java环境的步骤还是比较简单的。1.下载java8的包,并上传到服务器/usr/local目录下2.解压:注意自己包的名称tar -zxvf /usr/local/jdk-8u181-linux-x64.tar.gz解压后包名:jdk1.8.0_1813.配置环境变量:vim /etc/profile将下面这段信息添加的配置文件中,注意包名;export JAVA_HOME=/usr/local/jdk1.8.0_181export PATH=$JAVA_HOME原创 2020-12-30 14:19:10 · 705 阅读 · 2 评论 -
java学习知识图谱
都说活到老学到老,作为一名半路出家的程序员,工作越久,越发现要学习的东西太多太多,所以整理了一份java从业者的技术学习路线,或许不能涵盖所有公司使用的技术,但是应该也算是比较主流的技术体系了,如果能全部掌握的伙伴,估计进大厂是没什么问题的。我也在按照这个路线学习爬坑中,共同加油吧!地址:https://www.processon.com/view/link/5fa2a6427d9c081baf150ee3#map...原创 2020-12-25 13:58:02 · 176 阅读 · 1 评论 -
java事件监听处理机制
java事件监听处理机制一、java事件3大组成要素1.EventObject:事件状态对象,一般自定义事件对象来继承该父对象2.EventSource:事件源,比如一个点击事件,一个数据修改变动等等均可以作为事件源3.EventListener:事件监听器,对于发生的事件,我们可能需要采取相应的操作,这个时候就需要使用监听者来实现。EventListener是一个接口,具体从操作实现方法可以实现该接口。伴随着事件的发生,相应的状态通常都封装在事件状态对象中,该对象必须继承自java.u原创 2020-12-22 12:03:29 · 525 阅读 · 0 评论 -
java堆内存溢出展示以及优化思路
java堆内存溢出展示以及优化思路一、JAVA堆溢出本文只针对java堆内存溢出,不针对其它内存溢出:如java栈内存溢出或者之前的的一遍文章《java虚拟机的学习笔记》已经讲过,Java堆是用来存储对象实例的。所以想要演示出OOM效果,我们就无限制不停的创建新的对象实例,且保证GC Roots到对象之间有可达路径来避免垃圾回收机制清除这些对象,当实例的数量触及到了堆的最大容量值的时候,就会产生内存溢出异常(OutOfMemoryError);二、模拟堆内存溢出测试由于现在大家的电脑配置都很高,为原创 2020-11-21 17:43:06 · 2191 阅读 · 0 评论 -
实用的List集合分页工具类
实用的List集合分页工具类import lombok.extern.slf4j.Slf4j;import java.util.ArrayList;import java.util.List;@Slf4jpublic class ListPagHelper<T> { private int total; private List<T> dataList; public ListPagHelper(List<T> list, i原创 2020-11-19 17:11:21 · 1603 阅读 · 0 评论 -
java虚拟机的介绍
java虚拟机的学习笔记一、JVM基本结构1.类加载器2.执行引擎3.运行时数据区4.本地库接口Class Files ----> ClassLoader---->运行时数据区---->执行引擎,本地库接口----->本地方法库二、类的装载顺序:1.类装载:加载,连接(验证,准备,解析),初始化,使用,卸载;Class保存类的定义或者结构在堆中;2.初始化:执行类的构造器,为类的静态变量赋予正确的初始值。构造器:1.static变量2.static{}语句原创 2020-11-18 22:33:19 · 417 阅读 · 1 评论 -
ConcurrentHashMap的作用与用法
ConcurrentHashMap的作用与用法一.ConcurrentHashMap简介ConcurrentHashMap是属于JUC工具包中的并发容器之一,再多线程开发中很经常会使用到这个类,它与HashMap的区别是HashMap是线程不安全的,但是ConcurrentHashMap是线程安全的。JDK1.8的实现已经抛弃了Segment分段锁机制,利用CAS+Synchronized来保证并发更新的安全,采用的数据结构(数组+链表+红黑树)。ConcurrentHashMap 是设计为非阻塞的原创 2020-11-16 11:26:45 · 15543 阅读 · 2 评论 -
并发容器之CopyOnWriteArrayList讲解
并发容器之CopyOnWriteArrayList讲解CopyOnWriteArrayList是JUC工具包中的一个工具类,是属于线程安全的,其所有可变操作(add、set等等)都是通过对底层数组进行一次新的复制来实现的,它的特点是读操作的时候是不加锁的,写操作的时候会加锁,保证数据安全。一.原理分析:直接上源码我们先看一下其构造方法:其无参构造方法中,实际就算创建了一个transient volatile Object[] array数组;/** The array, accessed only原创 2020-11-15 19:17:41 · 168 阅读 · 0 评论 -
LongAdder的使用
LongAdderJDK1.8新增一个原子性操作类LongAdder,用于代替AtomicLong的功能,因为在非常高并发的请求下,AtomicLong的性能是一个很大的瓶颈,因为AtomicLong采用的CAS算法失败后还是通过无限循环的自旋锁不断的尝试。AtomicLong的自增取值方法:缺点: 唯一会制约AtomicLong高效的原因是高并发,高并发意味着CAS的失败几率更高,重试次数更多,越多线程重试,CAS失败几率又越高,变成恶性循环,AtomicLong效率降低public final原创 2020-11-09 19:47:11 · 4688 阅读 · 3 评论 -
CyclicBarrie(循环栅栏)的作用与用法
CyclicBarrie的作用与用法一、CyclicBarrie的作用CyclicBarrier循环栅栏(循环屏障)是一个多线程同步的辅助工具类,它允许一组线程在到达某个等待屏障点(common barrier point)互相等待,发生阻塞,直到最后一个线程到达等待屏障点,屏障才会打开,之前处于阻塞状态的线程才能恢复继续执行.它非常适用于一组线程之间必需经常互相等待的情况。CyclicBarrier从字面理解是循环的栅栏,之所以称之为循环的是因为在等待线程释放后,该栅栏还可以复用。后面我们代码中会进原创 2020-11-08 15:39:15 · 1757 阅读 · 0 评论 -
ThreadLocal的作用与使用方法
ThreadLocal的作用与使用方法1.ThreadLocal的作用:按照官方解释:ThreadLocal的作用是提供线程内的局部变量,在多线程环境下访问时能保证各个线程内的ThreadLocal变量各自独立。也就是说,每个线程的ThreadLocal变量是自己专用的,其他线程是访问不到的。Thread Local的方法:1.threadLocal.set(T value) // 设置线程内初始化实例对象2.threadLocal.get() // 获取线程内该实例对象3.threadLo原创 2020-10-25 20:47:55 · 5186 阅读 · 3 评论 -
CountDownLatch:倒计数器的作用与使用
CountDownLatch:倒计数器CountDownLatch作用:是一个非常实用的JDK多线程工具类,是一个用来计算线程数量的倒计数器。它能起到线程之间通信的作用,能够使一个线程在等待另外一些线程完成各自工作之后,再继续执行简单的理解:有这样一种场景,main主方法(主线程)内用多个线程执行一个打印1-10的任务,必须等所有线程执行完该任务以后,主线程才能继续往下执行其它逻辑。CountDownLatch的不足它是一次性的,计算器的值只能在构造方法中初始化一次,之后没有任何机制再次对其设置原创 2020-11-03 09:21:17 · 219 阅读 · 0 评论 -
多线程生产者和消费者使用wait和notify实现通信
多线程生产者和消费者使用wait和notify实现通信场景:生产者:生产某一个公共数据对象;样例代码中写线程模拟生产:WriteThread消费者:消费生产者产生的数据;样例代码中的读线程模拟消费:ReadThread锁对象:生产者和消费者共用一把锁,通过对这把锁的获取和释放实现通信代码演示:package com.demo.spring.test.baseThread;/** * @Description: 模拟生产者和消费者,相互等待通知等情况 * 模拟输出 Jack:20;原创 2020-10-20 10:12:37 · 100 阅读 · 1 评论 -
线程池原理:手写简单的线程池
线程池原理:手写简单线程池一、线程池作用1.提高程序执行效率,并发执行提高响应速度;2.线程复用,减少频繁创建销毁线程对服务器的性能消耗3.有利于对线程进行管理二、线程池基本的常见构成要素1.执行的线程数量,开启执行的线程;2.执行的任务集合3.构造方法4.executor方法或者5.shutdown停止线程的方法三、手写简单线程池样例,有利于加深对线程池工作原理的理解package com.demo.spring.test.threadPool;import java.原创 2020-10-22 10:33:25 · 241 阅读 · 2 评论 -
多线程简介-狗狗大蛇
多线程简介一、线程与进程1.进程:系统中运行的程序,一个进程至少有一个线程2.线程:进程的基本执行单元二、多线程原理每个CPU实际只能处理一条线程,多线程实际是CPU在多个线程之间来回切换,由于时间特别快,给人造成并行执行的假象;一个进程中有多个线程执行任务可以提高程序效率;三、多线程实现的4种方式extends Thread:不灵活implements Runable:工作中常用implements Callable<Object.class>:可以有返回值4种线程池原创 2020-10-17 22:05:40 · 257 阅读 · 0 评论 -
项目中@PostConstruct注解的使用
@PostConstruct注解的使用@PostConstruct注解简介@PostConstruct注解好多人以为是Spring提供的。其实是Java自己的注解。Java中该注解的说明:@PostConstruct该注解被用来修饰一个非静态的void()方法。被@PostConstruct修饰的方法会在服务器加载Servle的时候运行,并且只会被服务器执行一次。PostConstruct在构造函数之后执行一、加载顺序 :服务器加载Servlet -> servlet 构造函数的加载 -&原创 2020-10-19 14:18:20 · 1043 阅读 · 1 评论 -
Java单例模式的作用与使用方法
单例模式概述定义:用来创建唯一的实例对象,简单理解就算全局只能有一个这样的实例,不能出现多个;构成条件:私有化构造方法,禁止外部类new实例;在自己类中创建一个实例提供一个对外部的方法,用于获取实例;代码实例:单例的写法很多,有不加锁的简单单例,也有加锁(synchronize)现在安全的单例模式。本实例既兼顾了懒加载模式又兼顾了线程安全;推荐使用;这种方法巧妙的使用了内部类和类的初始化方式,利用虚拟机的类初始化机制创建单例。package com.demo.spring.test.jav原创 2020-11-06 10:03:08 · 481 阅读 · 0 评论 -
java8新特性stream流操作集合
java8新特性stream流操作集合执行结果##Stream流操作集合样例package com.demo.spring.test;import com.alibaba.fastjson.JSONObject;import com.demo.spring.dto.User;import io.swagger.models.auth.In;import java.util.*;import java.util.stream.Collectors;import java.util.stre原创 2020-10-17 21:56:35 · 154 阅读 · 0 评论