java多线程
tinysakurac
蹒跚学步的猿
展开
-
读写锁降级
转载自light_shine的博客锁降级锁降级指的是写锁降级成为读锁。锁降级是指把持住当前拥有的写锁的同时,再获取到读锁,随后释放写锁的过程。以下是oracle官网的对于锁降级的示例代码: class CachedData { Object data; volatile boolean cacheValid; final ReentrantReadWriteLock rwl = new ReentrantReadWriteLock(); void processCachedD转载 2020-10-10 20:07:32 · 933 阅读 · 0 评论 -
深入浅出java semphore
转载自占小狼的博客前言JDK的并发包中提供了几个非常有用的工具类,这些工具类给我们在业务开发过程中提供了一种并发流程控制的手段,本文会基于实际应用场景介绍如何使用Semaphore,以及内部实现机制。Semaphore是什么Semaphore也叫信号量,在JDK1.5被引入,可以用来控制同时访问特定资源的线程数量,通过协调各个线程,以保证合理的使用资源。Semaphore内部维护了一组虚...转载 2019-08-07 20:19:30 · 205 阅读 · 0 评论 -
简单理解一个dubbo服务的完整调用过程
转载自dubbo官网感受学习业内优秀开源分布式框架的底层rpc实现原创 2019-08-02 10:43:33 · 4425 阅读 · 0 评论 -
java并发工具类——Phaser
转载自sithcait的博客在JAVA 1.7引入了一个新的并发API:Phaser,一个可重用的同步barrier。在此前,JAVA已经有CyclicBarrier、CountDownLatch这两种同步barrier,但是Phaser更加灵活,而且侧重于“重用”。一、简述1、注册机制与其他barrier不同的是,Phaser中的“注册的同步者(parties)”会随时间而变化,Phas...转载 2019-08-08 09:02:29 · 607 阅读 · 0 评论 -
个人开源项目smart_search_box
recommendsmart_search_box是java领域的一站式搜索引擎解决方案,用户只需要进行简单的配置就可以在项目中引入完整的全文搜索能力,包括数据入库自动索引,搜索词联想,热词提示,高亮等功能。同时提供给用户高度的自定义能力,用户可以替换框架的部分实现,包括替换elastic search客户端,替换分词器,替换redis客户端等,只需要实现对应的接口替换默认注入的相应组件即可。默...原创 2019-05-18 14:39:21 · 359 阅读 · 0 评论 -
基于RxJava封装的异步聚合计算结果的工具类
实习时被大佬问了一个问题,如何将一个foreach操作分别在不同线程中执行后同步聚集异步操作的结果执行后面的操作以提升响应速度,当时上线问题还有一个没解决所以忙乱中只想出一个通过CountDownLatch(闭锁)的方法,之后仔细想了想至少有三种方法可以解决这个问题。闭锁第一种方式闭锁,不用多说,下面给出伪代码 public static void main(String[] args...原创 2019-02-25 16:58:35 · 592 阅读 · 0 评论 -
ConcurrentHashMap JDK1.7与JDK1.8源码区别
前言 以前写过介绍HashMap的文章,文中提到过HashMap在put的时候,插入的元素超过了容量(由负载因子决定)的范围就会触发扩容操作,就是rehash,这个会重新将原数组的内容重新hash到新的扩容数组中,在多线程的环境下,存在同时其他的元素也在进行put操作,如果hash值相同,可能出现同时在同一数组下用链表表示,造成闭环,导致在get时会出现死循环,所以HashMap是线程不安全的。...转载 2018-08-17 20:38:52 · 130 阅读 · 0 评论 -
ThreadLocal的作用与实现原理
Why ThreadLocal?无论如何,要编写一个多线程安全(Thread-safe)的程序是困难的,为了让线程共享资源,必须小心地对共享资源进行同步,同步带来一定的效能延迟,而另一方面,在处理同步的时候,又要注意对象的锁定与释放,避免产生死结,种种因素都使得编写多线程程序变得困难。尝试从另一个角度来思考多线程共享资源的问题,既然共享资源这么困难,那么就干脆不要共享,何不为每个线程创造一...转载 2018-08-17 20:30:26 · 706 阅读 · 0 评论 -
synchronize类锁与对象锁的区别
synchronized 加到 static 方法前面是给class 加锁,即类锁;而synchronized 加到非静态方法前面是给对象上锁。这两者的区别我用代码来演示下:对象锁和类锁是不同的锁,所以多个线程同时执行这2个不同锁的方法时,是异步的。 在Task2 中定义三个方法 doLongTimeTaskA和doLongTimeTaskB是类锁,而doLongTimeTaskC是对象锁。...转载 2018-08-17 19:45:18 · 1456 阅读 · 0 评论 -
FutureTask的cancel()方法分析
面试时被问到futurtask的取消原理,没回答上来,回来阅读以下源码做个记录。 //有一个入参,需要说明task是否是可中断的 public boolean cancel(boolean mayInterruptIfRunning) { if (state != NEW) return false; if (mayIn...原创 2018-08-22 08:25:05 · 5067 阅读 · 1 评论