随笔分类 - Java&Spring
摘要:本文记录 Java 分批调用代码逻辑,虽然分批调用有很多种写法,但是考虑线程池提交任务执行、某个批次执行结果失败如何处理、某一批次的执行结果如何与原来的 task 对应等。考虑到这些细节,记录下分批处理的写法: ```java public class InvokeAllTest { public
阅读全文
摘要:多线程打印01 02 03 04 05 ... 1. main 函数中的while(true)表示线程会一直争抢锁,进行打印 2. 通过检查条件变量是否满足,来决定打印0、还是打印奇数、还是打印偶数 3. volatile 变量 enableOdd 在打印0之后,进行切换:决定打印奇数 or 打印偶
阅读全文
摘要:如题。本文给出交替打印的代码示例,并解释了条件变量在代码实现中所起的作用。 使用三个线程,一个只负责打印A,另一个只负责打印B,最后一个只负责打印C 按顺序交替。即打印A后,才能打印B,打印B后,才能打印C 由于按序交替,最好采用条件队列来实现。初始时,只有打印A的条件满足 打印B、C的条件都不满足
阅读全文
摘要:guava 包的一些常用集合操作 List 转 Map Key 关联多个 Value 的 Map 结构 Key-Value 互转 多线程并发阻塞 多线程异步回调 CompleteFuture vs Guava 异步回调 List 转 Map Book book1 = new Book("isbn-1
阅读全文
摘要:Spring注解是如何生效的? 现在大部分开发已经采用Spring Boot了,少了很多配置文件,方便了许多。以前在使用注解,比如@Autowired、@Resource 或者事务相关的一些注解时,我们会首先在配置文件里面加入这样的配置: context:component scan context
阅读全文
摘要:交替打印AB。 ```java import java.util.concurrent.TimeUnit; /** * @author psj * @date 20-3-7 */ public class PrintAB { private volatile boolean isA = true;
阅读全文
摘要:谈谈多线程 多线程真的是一个很宽的话题,可以聊一串东西线程安全、同步机制、锁、线程运行状态、CAS原子操作、线程池、甚至是JMM、内存可见性等。 而在日常coding中更多地关注是创建线程池提交多个任务执行,分析哪些数据结构被多个线程共享访问,在哪个方法上加锁?如果程序运行一段时间出问题,可能jst
阅读全文
摘要:谈谈 Callable 任务是怎么运行的?它的执行结果又是怎么获取的? 向线程池提交Callable任务,会创建一个新线程(执行任务的线程)去执行这个Callable任务,但是通过Future get获取任务的执行结果是在提交任务的调用者线程中,那问题一:调用者线程如何获取执行任务的线程的结果? 在
阅读全文
摘要:Elasticsearch中各种线程池分析 最近看完了 "ElasticSearch线程池模块" 的源码,感触颇深,然后也自不量力地借鉴ES的 EsThreadPoolExecutor 重新造了一把轮子( "源码在这里" ),对线程池的理解又加深了一些。在继承 ThreadPoolExecutor实
阅读全文
摘要:谈谈JAVA中的安全发布 昨天看到 "一篇文章" 阐述技术类资料的"等级",看完之后很有共鸣。再加上最近在工作中越发觉得线程安全性的重要性和难以捉摸,又掏出了《Java并发编程实战》研读一番,这本书应该是属于为“JAVA 多线程作注解”的一本书,那我就为书中关于对象安全发布的内容作一些注解,作为今年
阅读全文
摘要:线程池异常处理之重启线程处理任务 本文记录一下在使用线程池过程中,如何处理 循环长期运行的任务,在业务处理逻辑中,如果抛出了运行时异常时怎样重新提交任务。 这种情形在 "Kafka消费者" 中遇到,当为每个Consumer开启一个线程时, 在线程的run方法中会有 循环中消费Topic数据。 本文会
阅读全文
摘要:String str1 和 str2 所指向的对象在 "字符串常量池" 中,是同一个对象。 All literal strings and string valued constant expressions are interned,When the intern method is invoke
阅读全文
摘要:记一次线程池任务执行异常 一个名为 fetch 线程池负责从Redis中读取文本数据,将读取到的文本数据提交给另一个线程池 tw ,将 tw 线程池将任务通过HTTP请求的形式上报给过滤服务。如下图所示: 一开始采用默认线程池配置方式: 然后只提交三个任务 ,startService() 是个 以
阅读全文
摘要:明白生产环境中的jvm参数 写代码的时候,程序写完了,发到线上去运行,跑一段时间后,程序变慢了,cpu负载高了……一堆问题出来了,所以了解一下生产环境的机器上的jvm配置是有必要的。比如说: JDK版本是多少?采用何种垃圾回收器? 程序启动的时候默认分配堆内存空间是多少?随着程序的运行,程序最多能使
阅读全文
摘要:JAVA方法调用中的解析与分派 本文算是《深入理解JVM》的读书笔记,参考书中的相关代码示例,从字节码指令角度看看解析与分派的区别。 方法调用,其实就是要回答一个问题:JVM在执行一个方法的时候,它是如何找到这个方法的? 找一个方法,就需要知道 所谓的 地址。这个地址,从不同的层次看,对它的称呼也不
阅读全文
摘要:static 和 final 关键字 对实例变量赋初始值的影响 最近一直在看《深入理解Java虚拟机》,在看完了对象内存分配、Class文件格式之后,想深扒一下实例变量是如何被赋上初始值的这个问题的细节。 在2.3.1小节中讲对象创建的时候,讲到内存分配有两种方式:一种是指针碰撞;另一种是空闲列表。
阅读全文
摘要:从虚拟机指令执行的角度分析JAVA中多态的实现原理 前几天突然被一个“家伙”问了几个问题,其中一个是:JAVA中的多态的实现原理是什么? 我一想,这肯定不是从语法的角度来阐释多态吧,隐隐约约地记得是与Class文件格式中的方法表有关,但是不知道虚拟机在执行的时候,是如何选择正确的方法来执行的了。so
阅读全文
摘要:问题描述 想在一个JAVA Class 向同一个Redis实例的不同 dbindex 写入数据,非常类似于StackOverflowe上的 "[How can select dbIndex when I use RedisTemplate in Spring Data Redis?" 。在 "这篇文
阅读全文
摘要:这篇文章记录使用spring boot starter redis访问Redis。Redis相关的的配置文件放在Resources目录下的application.yml文件中,如下所示: 首先在pom.xml中添加依赖: RedisTemplate配置 Spring boot默认能够使用 @Auto
阅读全文
摘要:由于需要访问MongoDB,但是本地开发环境不能直接连接MongoDB,需要通过SecureCRT使用127.0.0.2本地IP代理。但是程序部署到线上生产环境后,是可以直接访问MongoDB的,因此开发好程序后,总是要修改一下MongoDB服务器的IP才能提交代码,这样很是不方便。 由于没有使用s
阅读全文