并发编程
文章平均质量分 66
Apllo_boy
聚水成滴,积木成林。
展开
-
ArrayBlockingQueue 和 LinkedBlockingQueue
一. 什么是队列? 队列(queue)是一种线性表,一端插入,另一端取出。跟排队一样,刚来的人排在后面,先排队的人先走。二. BlockingQueue(阻塞队列) 在Concurrent包中,BlockingQueue很好的解决了多线程中,高效安全“传输”数据的问题。通过这些高效并且线程安全的队列类,为我们快速搭建高质量的多线程程序带来极大的便利。阻塞队列与我们...原创 2018-09-18 10:45:22 · 266 阅读 · 0 评论 -
ThreadPoolExecutor 线程池
使用线程池主要为了解决一下几个问题:通过重用线程池中的线程,来减少每个线程创建和销毁的性能开销。 对线程进行一些维护和管理,比如定时开始,周期执行,并发数控制等等。ExecutorExecutor是一个接口,跟线程池有关的基本都要跟他打交道。下面是常用的ThreadPoolExecutor的关系。Executor接口很简单,只有一个execute方法。ExecutorSer...转载 2018-09-18 10:42:31 · 101 阅读 · 0 评论 -
synchronized 关键字
线程安全是并发编程中的重要关注点,应该注意到的是,造成线程安全问题的主要诱因有两点,一是存在共享数据(也称临界资源),二是存在多条线程共同操作共享数据。因此为了解决这个问题,我们可能需要这样一个方案,当存在多个线程操作共享数据时,需要保证同一时刻有且只有一个线程在操作共享数据,其他线程必须等到该线程处理完数据后再进行,这种方式有个高尚的名称叫互斥锁,即能达到互斥访问目的的锁,也就是...原创 2018-09-21 15:49:50 · 76 阅读 · 0 评论 -
volatile 关键字
一、基本概念先补充一下概念:Java 内存模型中的可见性、原子性和有序性。可见性: 可见性是一种复杂的属性,因为可见性中的错误总是会违背我们的直觉。通常,我们无法确保执行读操作的线程能适时地看到其他线程写入的值,有时甚至是根本不可能的事情。为了确保多个线程之间对内存写入操作的可见性,必须使用同步机制。 可见性,是指线程之间的可见性,一个线程修改的状态对另一个线程是可见的。也就是...转载 2018-11-09 14:53:50 · 89 阅读 · 0 评论 -
原子操作类AtomicInteger详解
为什么需要AtomicInteger原子操作类?对于全局变量的数值类型操作 num++,若没有加synchronized关键字则是线程不安全的,num++解析为num=num+1,明显,这个操作不具备原子性,多线程时必然会出现问题。测试下:public class AtomicIntegerTest1 { public static int count = 0; public...转载 2018-11-09 16:02:57 · 141 阅读 · 0 评论 -
乐观锁和悲观锁
一、问题引出1. 假设当当网上用户下单买了本书,这时数据库中有条订单号为001的订单,其中有个status字段是’有效’,表示该订单是有效的;2. 后台管理人员查询到这条001的订单,并且看到状态是有效的;3. 用户发现下单的时候下错了,于是撤销订单,假设运行这样一条SQL: update order_table set status = ‘取消’ where order_id = ...转载 2018-11-09 17:16:03 · 76 阅读 · 0 评论