首页
AI Coding
NEW
沸点
课程
直播
活动
AI刷题
APP
插件
搜索历史
清空
创作者中心
写文章
发沸点
写笔记
写代码
草稿箱
创作灵感
查看更多
会员
登录
注册
Java并发编程
铿然架构
创建于2021-08-08
订阅专栏
Java并发编程
等 36 人订阅
共26篇文章
创建于2021-08-08
订阅专栏
默认顺序
默认顺序
最早发布
最新发布
Java并发编程入门(二十六)无锁方式获取池化资源
相关阅读: Java并发编程(二)原子性 Java并发编程(三)可见性 Java并发编程(四)有序性 Java并发编程(五)创建线程方式概览 Java并发编程入门(六)synchronized用法 J
Java并发编程入门(二十五)DelayQueue
相关阅读: Java并发编程(二)原子性 Java并发编程(三)可见性 Java并发编程(四)有序性 Java并发编程(五)创建线程方式概览 Java并发编程入门(六)synchronized用法 J
Java并发编程入门(二十四)Java原子类
相关阅读: Java并发编程(二)原子性 Java并发编程(三)可见性 Java并发编程(四)有序性 Java并发编程(五)创建线程方式概览 Java并发编程入门(六)synchronized用法 J
Java并发编程入门(二十三)守护线程
相关阅读: Java并发编程(二)原子性 Java并发编程(三)可见性 Java并发编程(四)有序性 Java并发编程(五)创建线程方式概览 Java并发编程入门(六)synchronized用法 J
Java并发编程入门(二十二)ThreadLocal变量
相关阅读: Java并发编程(二)原子性 Java并发编程(三)可见性 Java并发编程(四)有序性 Java并发编程(五)创建线程方式概览 Java并发编程入门(六)synchronized用法 J
Java并发编程入门(二十一)volatile关键字
相关阅读: Java并发编程(二)原子性 Java并发编程(三)可见性 Java并发编程(四)有序性 Java并发编程(五)创建线程方式概览 Java并发编程入门(六)synchronized用法 J
Java并发编程入门(二十)常见加锁场景和加锁工具
1. 常见加锁场景和加锁工具 上述多种方式指的是有多种方式实现,只要能做到加锁则可,例如可以使用synchronized关键字来加锁,也可以使用ReentrantLock来实现加锁。 2. 举例 2.1. ReentrantLock 可以看到ReentrantLock是读写互斥…
Java并发编程入门(十九)异步任务调度工具CompleteFeature
1. CompleteFeature简介 CompleteFeature是对Feature的增强,Feature只能处理简单的异步任务,而CompleteFeature可以将多个异步任务进行复杂的组合,支持串行执行,并行执行,And汇聚,Or汇聚,从而能对复杂的关联任务进行调度…
Java并发编程入门(十八)再论线程安全
1.对象创建后状态就不再变化。 2.对象的所有域都是final类型。 3.创建对象期间,this引用没有溢出。 1.只要成员变量是私有的,并且只提供只读操作,就可能做到线程安全,并不一定需要final修饰,注意这里说的是可能,原因见第2点。 2.只有只读操作。 3.任何时候对象…
Java并发编程入门(十七)一图掌握线程常用类和接口
1.Thread和Runnable是最常用的,区别是一个是类,一个是接口。类的缺点是只能单继承,而接口没有这个限制。 2.Thread和Runnable没有返回值,想得到线程执行结果,要么是通过构造器事先注入存储执行结果的对象,要么是通过生产者-消费者模式得到。为了直接得到线程…
Java并发编程入门(十六)正确理解两类线程池
1.每个请求先将数据放入队列中,由已运行的线程从队列中获取后入库。 2.每个请求启动一个新线程,将数据传给新线程处理入库。 由于线程的创建和切换比较耗资源,因此第2种方式下每个请求都要启动一个新的线程来处理无疑不可行。 在这个例子中,使用方式1处理就可以了,方式一中事先运行的几…
Java并发编程入门(十五)CyclicBarrier应用场景
现实生活做中有很多这样的场景:做F前需要等待A,B,C,D,E完成,A,B,C,D,E可以并发完成,没有特定顺序,并且F做完后又重新开始,例如:组装汽车前需要先生产轮胎,车门,车身等等。
Java并发编程入门(十四)CountDownLatch应用场景
现实生活做中有很多这样的场景:做F前需要等待A,B,C,D,E完成,A,B,C,D,E可以并发完成,没有特定顺序,例如:周末在家里吃饭,有3件事情要做,爸爸做饭,妈妈做菜,儿子收拾餐桌,摆放碗筷。
Java并发编程入门(十三)读写锁和缓存模板
提到读写锁,都能想到是锁优化方式之一的锁分离,实现效果是读读不互斥,读写互斥,写写互斥。 读写锁本身比较简单,下面通过一个例子看看读写锁的使用。 1.Cache是一个抽象类,实现了缓存的基本方法,子类只需要实现init方法初始化缓存数据, 读写锁在此类中应用。 2.CacheM…
Java并发编程入门(十二)生产者和消费者模式-代码模板
生产者和消费者模式应用于异步处理场景,异步处理的好处是生产者和消费者解耦,不互相依赖,生产者不需要等待消费者处理完,就可以持续生产消费内容,效率大大提高。 1.BlockedQueue是一个阻塞的有界队列,用于存、取消费内容。 2.Producer是生产者,在这里是一个抽象类,…
Java并发编程入门(十一)限流场景和Spring限流器实现
限流场景一般基于硬件资源的使用负载,包括CPU,内存,IO。例如某个报表服务需要消耗大量内存,如果并发数增加就会拖慢整个应用,甚至内存溢出导致应用挂掉。 限流适用于会动态增加的资源,已经池化的资源不一定需要限流,例如数据库连接池,它是已经确定的资源,池的大小固定(即使可以动态伸…
Java并发编程入门(十)锁优化
无锁方案单独介绍,避免死锁可参考:Java并发编程入门(九)死锁和死锁定位。 只对有同步需要的代码块做同步处理,而不一定要对整个方法做同步,例如单例模式的二次检查。 1.对于读多写少的数据可以分离读写锁,读读不互斥,读写互斥,写写互斥,这样在读读时能提高效率。 2.对于链表数据…
Java并发编程入门(九)死锁和死锁定位
死锁:一组互相竞争资源的线程因互相等待,导致“永久”阻塞的现象。 4.循环等待,线程T1等待线程T2占有的资源,线程T2等待线程T1占有的资源,就是循环等待。 这四个条件同时满足时,才会发生死锁,因此避免死锁只要打破其中一个条件则可。 1.对于互斥这个条件无法破坏,因为使用锁为…
Java并发编程入门(八)线程生命周期
1.线程创建后状态为NEW 2.线程启动后状态从NEW变为RUNNABLE 3.线程调用同步代码块未获得同步锁时状态为BLOCK,如果获取到锁则状态为RUNNABLE 4.线程运行结束后状态为TERM
Java并发编程入门(七)轻松理解wait和notify以及使用场景
从日志可以看出,生成的任务数和线程被调用次数是相等的。 1.wait操作将调用线程放入wait队列中,等待唤醒。这里的调用线程不是TaskQueue,而是调用了removeTask()方法的Consumer。 2.wait队列归属一个对象,这里是this,而this是TaskQ…
下一页