之前犯了一个错误,一直以为ArrayBlcokingQueue用的是单向链表,LinkedBlockingQueue用的是双向链表。这是一个错误的理解,在此要纠正下。
ArrayBlcokingQueue与LinkedBlockingQueue在自定义线程池的时候经常用的两种队列模式。
ArrayBlcokingQueue是 基于数组的先进先出阻塞队列。
LinkedBlockingQueue是基于单向链表的先进先出阻塞队列。
在实际的业务场景中我们一般会碰到以下四种场景(在对同一个数据进行操作时)
写写 (不可并行)
写读 (?)
读读 (可并行)
读写 (?)
为什么读写和写读这里打个问号呢?这里我也不好回答究竟可不可以并行。在innoDB数据库中读写,写读是可以并行的。数据库中实现了MVCC(多版本控制),在每次进行操作的时候都会找跟版本一致快照数据,进行读操作。从而实现写阻塞读。
这里大家可以去看看mvcc与copy on w