
构建并发程序
文章平均质量分 73
以实战为线索;逐步深入并发编程|分布式编程的各个环节,掌握并发-分布式编程的常用性能体验和优化思路,打造完整的并发工作流,提升工程化编码能力和逻辑思维能力。
Recall-MK
这个作者很懒,什么都没留下…
展开
-
【构建并发程序】8-并发队列之阻塞队列
在创建ArrayBlockingQueue队列时,我们需要设置它的容量,即该队列能够容纳的元素数量的最大值。如果生产者创建元素的速度比消费者处理元素的速度快,那么就应该使用有界队列。否则,不断增长的无界队列会消耗光该程序的所有可用内存。LinkedBlockungQueue无界队列的例子;Main线程中对并发队列进行入队操作,其它线程对并发队列进行出队操作;如果消费者处理元素的速度要比生产者创建元素的速度快时,就可以使用该无界队列。原创 2022-09-14 01:00:00 · 138 阅读 · 0 评论 -
【构建并发程序】7-如何理解并发队列?
Q: 首先什么是队列?A: 队列的一个特点是先进先出;后进先出Q: 什么是并发队列?A: 同时有多个队列先进先出;后进先出。原创 2022-09-12 01:00:00 · 180 阅读 · 0 评论 -
【构建并发程序】6-并发集合(可变集合与不可变集合)
可互加微信,方便交流(备注请求时注明优快云来的朋友):a917655983不可变集合使用原子变量更加效率 (因为不可变集合还需要重新赋值)可变集合可变集合使用synchronzied更加效率(因为可变集合无需赋值)(本文章虽然采用的代码为scala代码,但java代码与Scala代码可以互相转换,且本质上两者所阐述的东西都是一致的)原创 2022-09-10 01:00:00 · 138 阅读 · 0 评论 -
【构建并发程序】5-惰性值lazy与循环依赖问题
可互加微信,方便交流(备注请求时注明优快云来的朋友):a917655983 假如我们对一个变量使用了lazy 则这个变量只有再被使用时才会执行初始化。惰性值在多线程中会遇到的问题 由于惰性值在访问时才会进行初始话,可以缩短程序的执行事件進而提高效率;问题:但是在多线程-线程池中,如果多个线程都需要访问惰性值,此时惰性值就会频繁的进行初始话,从而影响效率。对于我来说,我只想让惰性值被线程池中的某一个线程初始话一次就够了,没必要多个线程,每访问一次都要初始化一次。这个问题已经通过Scala(java同原创 2022-09-08 01:00:00 · 190 阅读 · 0 评论 -
【构建并发程序】4-原子变量-CAS-ABA问题
简单点就是,3个线程对某个原子变量val inte = new AutoicInteger(1)进行操作A线程要做inte.compareAndSet(1,2)B线程要做inte.compareAndSet(1,3)C线程要做inte.compareAndSet(3,1)A线程没抢过B,C两个线程,且BC两个线程中,B线程先执行的,然后是C线程,当C线程执行完后inte的内存地址已发生过两次偏移,新的地址值是1。原创 2022-09-06 01:00:00 · 313 阅读 · 0 评论 -
【构建并发程序】1-线程池-Executor-ExecutionContext
在每秒数千个请求的情况下,为每个请求都要创建一个新线程会拖慢系统的运行速度,因此同一个线程应该可以能够让许多个请求反复来进行使用;这些可重用的线程通常被称为线程池。Executor是一个简单的接口,它定义了一个名为execute的方法,该方法接受Runnable对象,并且最终会调用该对象中的run方法。通常Executor接口会以并发的方式将Runnable对象,处理为调用execute方 法的线程,然后将这些线程实现为 “线程池”;原创 2022-09-02 20:25:34 · 356 阅读 · 0 评论 -
【构建并发程序】2-线程池-的注意事项与缺点
线程池-的注意事项与缺点;不写shutdown为什么堵塞:因为是守护线程,main线程没退出,守护线程也不会“退出”, awaitTermination不会退出,所以就在这堵塞了shutdown放在其前面,awaitTermination等待期间,shutdown也在等待任务的结束。2. 因为ForkJoinPool(Executor)对象中的线程是守护线程,因此shutdown要与awaitTermination组合使用,要不然主线程很快结束,线程还没执行呢,也就结束了。原创 2022-09-03 07:59:26 · 847 阅读 · 0 评论 -
【构建并发程序】3-原子变量
原子变量还定义了其他复杂的原子操作,例如getAndSet,decrementAndGet,addAndGet之类的方法。而这些原子操作都实现了基本的原子操作(compareAndSet比较并转换操作),CAS会接收原子变量的当前值和新值,并在当前值等于预期值的情况下以原子方式将当前值替换为新值;原子变量被存储在支持复杂的可线性化操作的内存区域中。可线性化操作是指可立刻执行的任何操作,例如Volatile变量的写入操作就是一种可线性化操作。一个复杂的线性化操作至少包含2个步骤:读取和写入;原创 2022-09-04 14:15:50 · 248 阅读 · 0 评论