Java
文章平均质量分 68
Java
成长的小牛233
不辜负每一份热爱
展开
专栏收录文章
- 默认排序
- 最新发布
- 最早发布
- 最多阅读
- 最少阅读
-
基于CompletableFuture并发任务编排实现
文章目录并发任务编排实现不带返回值/参数传递任务串行执行并行执行并行执行-自定义线程池串并行任务编排并发任务编排实现其实Java8中提供了并发编程框架CompletableFuture,以下结合不同场景进行使用。不带返回值/参数传递任务模拟任务代码: DateTimeFormatter formatter = DateTimeFormatter.ofPattern("yyyy-MM-dd HH:mm:ss"); class TaskA implements Runnable{原创 2021-06-02 00:19:01 · 1717 阅读 · 5 评论 -
如何合理的配置线程数?
文章目录题记Java并发编程实战美团技术团队追求参数设置合理性线程池参数动态化题记我想不管是在面试中、还是工作中,我们总会面临这种问题,那么到底有没有一种计算公式去告诉我们如何去配置呢?答案是:没有想要合理的配置线程池参数,首先我们需要明白我们的任务是计算型还是IO密集型以及和CPU核数之间的关系。Java并发编程实战该书中推荐的计算方式线程数 = CPU 核心数 *(1+平均等待时间/平均工作时间)我觉得将这个公式转换一下更好理解线程数 = CPU 核心数 *(平均等待时间 + 平原创 2021-05-31 18:27:28 · 559 阅读 · 1 评论 -
MDC日志logback整合使用
MDC日志logback整合使用为什么使用MDC记录日志?场景:由于我的搜索服务并发量比较高,而处理一次搜索请求需要记录多个日志,因此日志特别多的情况下去查一次搜索整个日志打印情况会比较复杂。解决方案:可以使用用户id作为唯一标识,但是这种方案每次打印日志都需要传入用户id,并且如果一次请求涉及多线程场景下用户id传递会特别复杂,并且有的用户没有登录拿不到用户id每来一次搜索请求根据UUID生成一个标识作为traceId然后通过MDC记录这个traceId效果:入门指南:mave原创 2021-05-11 17:47:55 · 481 阅读 · 0 评论 -
深入剖析线程池基本原理以及常见面试题详解
文章目录面试官:能给我讲讲线程池的实现原理?线程池类继承关系ThreadPoolExecutor核心数据结构面试官:给我讲讲线程池的有哪些参数?面试官:如何优雅的关闭线程?线程的生命周期面试官:线程池哪五种状态?面试官:线程池哪4种拒绝策略?并分别说一下作用和实现原理?DiscardOldestPolicyAbortPolicyDiscardPolicyCallerRunsPolicy面试官:线程池常用的阻塞队列有哪些?能说下各自的区别?SynchronousQueue应用PriorityBlockedQu原创 2021-02-27 23:01:03 · 839 阅读 · 0 评论 -
No compiler is provided in this environment. Perhaps you are running on a JRE rather than a JDK
文章目录问题背景:问题排查过程问题背景:运行环境:Mac For IDEA我的Mac 更新最新系统(window解决办法也是如下)后,由于新系统的Mac会带JDK导致自动更新Java版本,最后导致我在Idea控制台中执行mvn install后抛出No compiler is provided in this environment. Perhaps you are running on a JRE rather than a JDK问题排查过程执行java -version判断java是原创 2021-02-18 19:27:57 · 294 阅读 · 2 评论 -
记录一次服务进程强行退出的问题排查过程
场景:我这边从Hbase跑一亿多的全量数据录入Elasticsearch中,跑了四个多小时,程序突然挂掉了,然后我就纳闷了,为啥突然挂掉了???思路1:是不是Java 进程抛出OOM异常?分析程序日志没有任何异常,如果出现这种异常应该会在日志中打印的啊,怎么没有呢?如果是java OOM异常会打印 Java heap space的Exception in thread "pool-13-thread-25" java.lang.OutOfMemoryError: Java heap spaceEx原创 2021-02-08 17:31:00 · 594 阅读 · 2 评论 -
多线程场景下利用ThreadLocal是线程安全?
多线程测试代码:package com.gome.search.indexer.join.cat3.partiton.osop.utils;import java.util.UUID;import java.util.concurrent.*;public class ThreadLocalMultiThread { ThreadLocal<String> threadLocal = new ThreadLocal<>(); public static原创 2021-02-06 00:32:04 · 1555 阅读 · 5 评论 -
java核心技术-jvm基础知识
文章目录JVM回顾JVM、JRE、JDK之间关系?Java程序执行过程?java虚拟机内存管理jvm整体架构jvm运行时内存程序计数器虚拟机栈本地方法栈堆元空间方法区运行时常量池直接内存OOM异常JVM类加载机制类加载系统类加载器双亲委派模型自定义类加载器ClassLoader源码剖析垃圾回收机制及算法如何判断对象已经死亡?面试:讲讲常见的垃圾收集算法?面试:垃圾回收器了解?讲讲几种垃圾回收器?我理解的垃圾回收器Serial[ˈsɪəriəl]收集器ParNew收集器Parallel(并行)[ˈpærəle原创 2021-01-17 16:03:25 · 885 阅读 · 0 评论 -
java核心技术-线程池基本原理以及常见面试题
文章目录线程池的实现原理线程池类继承关系ThreadPoolExecutorExecutor四种工具类ScheduledThreadPoolExecutorCompletableFuture用法线程池的实现原理线程池类继承关系ThreadPoolExecutorExecutor四种工具类ScheduledThreadPoolExecutorCompletableFuture用法...原创 2021-01-17 14:02:33 · 594 阅读 · 0 评论 -
java核心技术-多线程并发设计原理以及常见面试题
文章目录多线程回顾Thread和Runnablesynchronizedwait和notifyinterruptedException和interrupt()方法如何优雅的关闭线程并发核心概念并发与并行同步不可变对象原子操作和原子变量共享内存与原子传递并发问题数据竞争死锁活锁资源不足优先权反转JMM内存模型JMM和happen-beforevoliate关键字final关键字多线程回顾Thread和Runnablesynchronizedwait和notifyinterruptedExceptio原创 2021-01-17 13:29:48 · 709 阅读 · 0 评论 -
判断对象属性值是否为空
private boolean checkObjFieldIsNotNull(Object obj){ try { for (Field f : obj.getClass().getDeclaredFields()) { f.setAccessible(true); if (f.get(obj) != null) { return true; ...原创 2020-11-17 15:59:38 · 550 阅读 · 0 评论 -
【待完成】并发包下常用到线程工具类汇总
countDownLatchsemaphorecyclicBarrieThreadPoolExecutorimport org.junit.Test;import java.util.ArrayList;import java.util.HashMap;import java.util.concurrent.*;public class MyTest { /** * countDownLatch使用一:一个线程等待其他多个线程都执行完毕,再继续自己的工作 .原创 2020-11-14 23:14:08 · 758 阅读 · 0 评论 -
jdk、cglib动态代理代码示例
jdk动态代理实现步骤新建一个接口新建一个接口的实现类新建一个代理类,实现InvocationHandler接口,实现invoke方法-> method.invoke(…)在代理类中创建代理方法newProxy,传入目标对象,通过目标对象获取类加载器、类接口,调用Proxy.newProxyInstance方法获取代理对象通过代理对象调用具体方法代码示例新建一个接口package com.demo.rpc.proxy;public interface NewsService原创 2020-09-28 10:57:50 · 438 阅读 · 0 评论 -
java中钩子方法 addShutdownHook 学习使用
钩子作用:在线上Java程序中经常遇到进程程挂掉,一些状态没有正确的保存下来,这时候就需要在JVM关掉的时候执行一些清理现场的代码。Java中得ShutdownHook提供了比较好的方案。JDK在1.3之后提供了Java Runtime.addShutdownHook(Thread hook)方法,可以注册一个JVM关闭的钩子,这个钩子可以在以下几种场景被调用:触发条件:程序正常退出使用System.exit()终端使用Ctrl+C触发的中断系统关闭使用Kill pid命令干掉进程转载 2020-09-27 17:11:37 · 1585 阅读 · 0 评论 -
Java 回调 (Callback) 接口学习使用
Java 回调 (Callback) 接口学习使用1.什么是回调(Callback)?回调函数,简称回调,是指通过函数参数传递到其他代码的某一块可执行代码的引用,这一设计允许了底层代码调用在高层定义的子程序。简单来说:A调用了B的b()方法,那b方法如果包含对A中实现的逻辑的调用,这个过程就被称作回调。2.Java代码示例package callback;public class MQ { class Producer{ public void send(Str原创 2020-09-22 14:44:33 · 1503 阅读 · 0 评论 -
阿里巴巴Java开发手册-日志规约
1.【强制】 应用中不可直接使用日志系统(Log4j、Logback)中的API,而应依赖使用的SLF4j中的API。使用门面模式的日志框架吗,有利于维护和各个类的日志处理方式统一。 import org.slf4j.Logger; import org.slf4j.LoggerFactory; Logger logger = LoggerFactory.getLogger(JunitTestMyDemo.class);【强制】日志文件推荐至少保存15天【强制】日志命名规则:appNam原创 2020-09-01 19:35:32 · 1173 阅读 · 0 评论 -
阿里巴巴Java开发手册-finally块必须对资源对象、流对象进行关闭操作,如果有异常也要做try-cach操作
对于JDK7及以上版本,可以使用try-with-resources方式使用方式: /** * https://www.cnblogs.com/itZhy/p/7636615.html * 其实这种方式只是语法糖,反编译以后还是tryCacheThrowTest()中的代码 * https://www.cnblogs.com/langtianya/p/5139465.html * Throwable#addSuppressed()作用:通常在finall.原创 2020-09-01 19:11:09 · 775 阅读 · 0 评论 -
阿里巴巴Java开发手册-使用JDK8的Opional类来防止出现NPE问题
/** * https://www.baeldung.com/java-optional */ @Test public void optionalTest(){ Peo peo = new Peo("weijie", 18); /** * of、ofNullable */ //of 判断peo是否为空,如果不为空程序继续执行 Optional<Peo>...原创 2020-09-01 18:44:01 · 350 阅读 · 0 评论 -
ConcurrentLinkedQueue常用方法
ConcurrentLinkedQueue<Integer> queue = new ConcurrentLinkedQueue(); for (int i = 0; i < 100; i++){ queue.add(i); } //获取元素 不移除头结点 System.out.println(queue.peek()); //返回在此队列元素上以恰当顺序进行迭代的迭代...原创 2020-08-16 02:08:30 · 441 阅读 · 0 评论 -
java中强引用、弱引用、软引用、虚引用学习
将引用之前首先让我们一起回顾一下java对象的生命周期强引用在实际开发场景中,我们一般使用的都是强引用,只要强引用存在,垃圾回收即使OOM也不会回收,知道强引用释放以后,对象才会被释放掉,可以显示地将引用赋值为null,这样的话,JVM会在合适的时间回收该对象。以下是测试: public void method() { Object o = new Object(); Object[] os = new Object[800000]; Syst原创 2020-08-06 14:54:08 · 259 阅读 · 0 评论 -
【链接转载保存】Collections.singletonList方法的使用
https://www.cnblogs.com/oreo/p/9761940.html转载 2020-07-31 10:38:58 · 338 阅读 · 0 评论 -
springboot整合kafka
我的springboot是2.2.6版本pom配置: <dependency> <groupId>org.springframework.kafka</groupId> <artifactId>spring-kafka</artifactId> <version>2.4.3.RELEASE</version> </原创 2020-07-29 10:35:08 · 301 阅读 · 0 评论 -
判断对象所有属性是否全部为空
private boolean checkObjFieldIsNotNull(Object obj){ try { for (Field f : obj.getClass().getDeclaredFields()) { f.setAccessible(true); if (f.get(obj) != null) { return true; } } }ca转载 2020-07-23 18:25:32 · 1877 阅读 · 0 评论 -
java stream filter map collector使用
class People{ String name; int age; public String getName() { return name; } public void setName(String name) { this.name = name; } public int getAge() { ret...原创 2020-07-13 20:47:23 · 708 阅读 · 0 评论 -
枚举属性内容转List自己实现的方法
package jdksource;import java.lang.reflect.Array;import java.lang.reflect.Field;import java.util.ArrayList;import java.util.List;/** * @author weijie * @date 2020/5/9 17:06 */public class EnumTypeChangList { public enum Weekday {原创 2020-05-09 17:59:25 · 1016 阅读 · 0 评论 -
什么叫死锁?死锁案例?死锁必须满足哪些条件?如何定位死锁问题?有哪些解决死锁策略?哲学家问题?
死锁是什么?死锁一定发生在并发环境中,死锁是一种状态,当两个(或者多个线程)相互持有对方所需要的资源,却又都不主动释放手中持有的资源,导致大家都获取不到自己想要的资源,所有相关的线程无法继续执行。死锁案例import java.util.concurrent.ExecutorService;import java.util.concurrent.Executors;/** * @au...原创 2020-04-28 11:07:50 · 564 阅读 · 0 评论 -
java 自定义类加载器
import org.apache.commons.io.IOUtils;import java.io.File;import java.io.FileInputStream;import java.io.IOException;import java.io.InputStream;public class LocalClassLoader extends ClassLoader {...原创 2020-04-06 20:02:13 · 244 阅读 · 0 评论 -
java中String、StringBuffer equals使用注意
equals方法我们知道每个类其基类都是Object,Object默认的equals方式是:public boolean equals(Object obj) { if (this == obj) {//先进行地址比较 return true; }上面可以看出Object的equals方法比较两个对象的地址是否相等。接着我们来说下S...原创 2020-03-02 22:59:19 · 672 阅读 · 0 评论 -
【转载保存】ThreadPoolExecutor类使用详解
线程启动原理线程中断机制多线程实现方式FutureTask实现原理线程池之ThreadPoolExecutor概述线程池之ThreadPoolExecutor使用线程池之ThreadPoolExecutor状态控制线程池之ThreadPoolExecutor执行原理线程池之ScheduledThreadPoolExecutor概述线程池的优雅关闭实践转载:https://www.jianshu...转载 2020-02-17 03:09:40 · 242 阅读 · 0 评论 -
【转载保存】什么是线程阻塞?为什么会出现线程阻塞?
为什么会出现线程阻塞?1.睡眠状态:当一个线程执行代码的时候调用了sleep方法后,线程处于睡眠状态,需要设置一个睡眠时间,此时有其他线程需要执行时就会造成线程阻塞,而且sleep方法被调用之后,线程不会释放锁对象,也就是说锁还在该线程手里,CPU执行权还在自己手里,等睡眠时间一过,该线程就会进入就绪状态,典型的“占着茅坑不拉屎”;2.等待状态:当一个线程正在运行时,调用了wait方法,此...转载 2020-02-17 02:56:25 · 426 阅读 · 0 评论 -
java 8、9、10、11新特性学习
java8:https://www.runoob.com/java/java8-streams.html java9:https://www.runoob.com/java/java9-new-features.html java10:https://www.ibm.com/developerworks/cn/java/the-new-features-of-Java-10/index.htm...原创 2019-11-27 11:44:32 · 280 阅读 · 0 评论 -
【转载保存】java8新特性学习
编者注:Java 8已经公布有一段时间了,种种迹象表明Java 8是一个有重大改变的发行版。在Java Code Geeks上已经有大量的关于Java 8 的教程了,像玩转Java 8——lambda与并发,Java 8 Date Time API 教程: LocalDateTime和在Java 8中抽象类与接口的比较。我们也在其他地方引用了15个必读的Java 8教程。当然,我们也探究了...转载 2019-11-27 10:29:11 · 176 阅读 · 0 评论 -
亲测!FileUtils不是线程安全的使用注意
原创 2019-11-19 10:38:02 · 823 阅读 · 0 评论 -
SimpleDateFormat(线程不安全)与DateTimeFormatter(线程安全)
https://www.liaoxuefeng.com/wiki/1252599548343744/1303985694703650原创 2019-11-17 10:57:02 · 4959 阅读 · 0 评论 -
正则表达式大全
[正则表达式]文本框输入内容控制整数或者小数:^[0-9]+\.{0,1}[0-9]{0,2}$只能输入数字:"^[0-9]*$"。只能输入n位的数字:"^\d{n}$"。只能输入至少n位的数字:"^\d{n,}$"。只能输入m~n位的数字:。"^\d{m,n}$"只能输入零和非零开头的数字:"^(0|[1-9][0-9]*)$"。只能输入有两位小数的正实数:"^[0-9]+(.[...转载 2019-08-15 13:02:10 · 443 阅读 · 0 评论 -
【待解答】文件目录可以利用foreach边遍历边删除操作,为什么?
@Test public void demoTestDitDel() { File file = new File(util.Directory.GetAppPath("test")); File[] fs = file.listFiles(); for (File f : fs) { f.delete(); System.out.println("del"); ...原创 2019-07-04 14:49:40 · 370 阅读 · 0 评论 -
【使用注意】Boolean是final类型,值初始化后不能被更改
由于服务代码逻辑需要在map中的value存储Boolean,后面的代码逻辑 中我想更改Boolean的值发现更改不了,后来查找资料才发现原来Boolean实现类是定义为final,还是对原理不了解呀,以后多注重原理。测试代码(final类): HashMap<String,Boolean> map = new HashMap<String, Boolean>(); ...原创 2019-05-08 11:54:57 · 1905 阅读 · 2 评论 -
【转载保存】java静态方法继承与保存的问题
结论:java中静态属性和静态方法可以被继承,但是没有被重写(overwrite)而是被隐藏. 原因: 1).静态方法和属性是属于类的,调用的时候直接通过类名.方法名完成对,不需要继承机制及可以调用。如果子类里面定义了静态方法和属性,那么这时候父类的静态方法或属性称之为"隐藏"。如果你想要调用父类的静态方法和属性,直接通过父类名.方法或变量名完成,至于是否继承一说,子类是有继承...转载 2019-04-18 10:08:39 · 160 阅读 · 0 评论 -
【转载保存】匿名内部类中this的使用
转载链接:https://www.cnblogs.com/yaowen/p/9471389.html代码使用模板使用:package test;public class A extends B { public String toString() { return "A"; } public static void main(Str...转载 2019-04-14 13:58:04 · 918 阅读 · 0 评论 -
java几种遍历方式以及效率对比
几种遍历方式:/** * */package effectiveUse;import java.util.Iterator;import java.util.List;/** * @author weijie * * 2019年4月13日 */public class ForEachList { /* * 方式1:开始时候 */ public void...原创 2019-04-13 23:31:59 · 1385 阅读 · 0 评论
分享