Java基础
more_try
此间乐,不思蜀!
展开
-
CPU缓存与伪共享
计算机使用缓存机制加快io速度。缓存一般是由缓存行(cache line),一般一行有64字节,读取数据时一次将之后的64字节加载带缓存行,下次可以先从缓存行中获取数据,命中的话可以提高读取速度,未命中时从上一级缓存获取,直到从内存中获取。但是也会存在缓存竞争,如果CPU1与CPU2的L1缓存相同,那么他们需要竞争该缓存的使用权,如果CPU1修改了L1缓存,那么会使得CPU2的L1缓存失效...原创 2020-04-12 17:30:42 · 264 阅读 · 0 评论 -
字符串截取
提供字符串截取的一些工具方法,防止中文、表情符等编码出现乱码情况。按字符长度截取 /** * @param beginIndex 起始位置 * @param characterNum 字符个数 * @param str 原始文本 * @Author WangJie * @Description 截取n个字符,可以处理表情符号...原创 2020-03-31 14:38:50 · 311 阅读 · 0 评论 -
获取接口或父类的类型和类型变量的类型
原理通过类对象的genericSuperclass与getGenericInterfaces获取父类或接口类型。强转为泛型参数类ParameterizedType通过ParameterizedType的getActualTypeArguments方法获取所有的泛型参数类型代码构造需要的类public class SampleTest { interface A<T&g...原创 2019-12-02 13:52:47 · 296 阅读 · 0 评论 -
Java 8新特性:时间工具类
文章目录获取时区字符串转时间时间格式化输出与Date的转换与时间戳的转换时间调整到特定某天时间间隔获取时区//获取时区 @Test public void getZone(){ //默认时区 ZoneId zoneId = ZoneId.systemDefault(); System.out.println(zoneId.toSt...原创 2019-05-30 13:50:09 · 297 阅读 · 0 评论 -
ThreadLocal源码分析
原理每个Thread实例会有自己的ThreadLocalMap实例,ThreadLocal的set(value)方法会获取当前线程,把value存储到线程自己的ThreadLocalMap中,也就实现了线程之间的隔离:每次涉及到ThreadLocal的操作,实际上都是线程在操作自己的副本,线程之间不会共享ThreadLocal实例中的value值。所以ThreadLocal适用于在多线程环境,变...原创 2019-04-15 16:24:00 · 105 阅读 · 0 评论 -
数组实现队列,阻塞队列
今天做了一个笔试题,使用数组实现一个队列。现在记录一下当时的实现,之后再对这个实现进行改造升级。/** * @program: read-write * @description: 数组实现队列 * @author: WangJie * @create: 2019-03-03 21:45 **/public class MyQueue&amp;amp;amp;amp;lt;T&amp;amp;amp;amp;gt; { private ...原创 2019-03-03 22:29:43 · 383 阅读 · 1 评论 -
ReentrantReadWriteLock源码解析
原理共享锁(读锁)与独占锁(写锁)锁互斥读锁获取资源时,其他线程可以读锁获取资源,可重入。写锁获取资源时,只有获取写锁的线程可以再次加锁即锁重入。获取写锁的线程还可以获取读锁,写锁释放即锁降级。源码ReentrantReadWriteLock源码ReentrantReadWriteLock中有ReadLock和WriteLock,使用时新建ReentrantReadWriteLo...原创 2019-03-08 19:05:38 · 133 阅读 · 0 评论 -
理解volatile的保证可见性与不保证原子性
可见性编译器重排序指令执行机制CPU只对寄存器中的数据进行计算,为了加快寄存器和内存的数据交换,会有一个缓存区,寄存器与缓存区交换速度更快。数据从缓存区写回内存中这个动作由系统决定。所以会存在某一数据被修改,却没有被立即同步到内存中,导致其他线程拿到的值是过期值。而加了volatile则相当于告诉计算机将这个值立即写回内存,对其他线程可见。不保证原子性volatile字段可以保证线程拿到...原创 2019-01-29 20:04:42 · 652 阅读 · 0 评论 -
lambda表达式之CompletableFuture
最近阅读了java 8实战和java 8 函数式编程两本书,并参照书中的例子进行了编程练习,代码放在了GitHub上。对stream流的串行,并行,和一些流的操作函数进行了实操。也都是比较容易上手的。不过对于CompletableFuture类的使用,书中对其方法和应用讲的较为简单,自己在实际应用中遇到好多新的需求,经常需要再查资料来解决,现在把它们记录下来,加深印象。何时使用Comple...原创 2018-08-21 11:30:00 · 1295 阅读 · 0 评论 -
java线程池优化,不再使用Executors创建线程池
今天在使用之前的线程池工具的时候,阿里的代码规范插件提示不要这样创建线程池。看了插件做出的说明决定将线程池工具改为如下:import com.google.common.util.concurrent.ThreadFactoryBuilder;import java.util.concurrent.*;/** * * 线程池不允许使用Executors去创建,而是通过Thre...原创 2018-08-08 13:13:51 · 3855 阅读 · 0 评论 -
Java线程池ExecutorService
ExecutorService扩展了Executor并添加了一些生命周期管理的方法。一个Executor的生命周期有三种状态运行、关闭和终止。 Executor创建时处于运行状态。当调用ExecutorService.shutdown()后,处于关闭状态,isShutdown()方法返回true。这时,不应该再向Executor中添加任务,所有已添加的任务执行完毕后,Executor处于原创 2018-07-22 23:30:32 · 227 阅读 · 0 评论 -
Java UUID
Java UUID目录简介 作用 组成 Java UUID 生成 简介:UUID含义是通用唯一识别码 (Universally Unique Identifier),是一个软件建构的标准,也被开源软件基金会 (Open Software Foundation, OSF) 的组织应用在分布式计算环境 (Distributed Computing Environment,...转载 2018-07-23 17:59:21 · 149 阅读 · 0 评论