FutureTask源码分析概述Future表示一个任务的生命周期,是一个可取消的异步运算,可以把它看作是一个异步操作的结果的占位符,它将在未来的某个时刻完成,并提供对结果的访问。FutureTask为Future提供了基础实现,如获取任务执行结果何取消任务等。如果尚未完成,获取任务执行结果的线程会被阻塞,一旦执行结束,任务就不能被重启或取消。FutureTask常用来封装Clallable和Runnable,也可以作为一个任务提交到线程池中执行。2020-01-21
LinkedTransferQueue源码分析概述LinkedTransferQueue是单向链表结构的无界阻塞队列。它通过CAS和LockSupport来实现线程安全的。它采用一种预占模式,意思是当消费者线程取元素时,如果队列为空,那就生成一个节点(节点元素为null)入队,然后消费者线程被等待在这个节点上,后面生产者线程入队时发现一个元素为null的节点,就会直接将元素填充到该节点,并唤醒该节点等待的线程,被唤醒的消费者线程取走元素并返回。2020-01-18
ConcurrentLinkedQueue源码分析概述ConcurrentLinkedQueue是一个单向链表结构的无界并发队列。通过CAS来实现并发安全。内存一致性遵循对ConcurrentLinkedQueue的插入插入操作先行于访问会或移除操作。2020-01-17
ThreadPoolExecutor源码分析概述任务是一组逻辑工作单元,而线程则是是任务异步执行的机制。通过线程池就可以简化线程的管理工作。ThreadPoolExecutor是线程池的核心实现。线程池中预先提供了指定数量的可重用的线程,使用线程池避免了线程创建和终止的开销,节省了系统的资源。并且线程池维护了一些基础的数据统计,方便了线程的监控和管理。2020-01-17
ConcurrentSkipListMap源码分析概述ConcurrentSkipListMap是一个线程安全的有序的哈希表,并发安全主要由CAS来实现。内部的使用了跳表这种数据结构。ConcurrentSkipListSet的底层是基于ConcurrentSkipListMap实现的。2020-01-16
Spring事务基础事务的ACID Atomicity原子性:事务是一个原子操作,由一些列动作组成,事务的原子性确保动作要么全部完成,要么都不完成。 Consistency一致性:一旦事务完成,系统必须确保它锁建模的业务处于一致的状态,而不是部分完成或部分失败。 Isolation隔离性:可能有许多事务会同时处理相同的数据,因此每个事务都应该与其它事务隔离开来,防止数据破坏。 Durability持久性:一旦事务完成,无论系统发生什么故障,它的结果都不应该受到影响,这样就能从任何系统崩溃中恢复过来,通常情况下,事务的结果会被持久化到存储器中。 2020-01-15
CopyOnWriteArrayList,CopyOnWriteArraySet源码分析概述CopyOnWriteArrayList是一个线程安全的ArrayList,通过内部的volatile数组和显示锁ReentrantLock来实现线程安全。CopyOnWriteArraySet的底层也是基于CopyOnWriteArrayList实现的。CopyOnWriteArrayList更适合于读多写少的环节。2020-01-15
RabbitMQ的消息确认机制简介RabbitMQ中提供了消息确认的机制,通过消息确认机制可以确保我们的消息可靠的送达到用户的手中。即便消息丢失掉,我们也可以通过重发来确保消息送达。RabbitMQ提供了两种消息确认的机制: 通过AMQP事务机制来实现消息确认,这是通过AMQP协议来实现的。 通过将channel设置为confirm模式来实现 2020-01-14
ConcurrentHashMap源码分析概述ConcurrentHashmap是一个支持并发检索和并发更新的线程安全的HashMap,它是不支持空key和value的。ConcurrentHashMap在JDK1.7之前使用的Lock和Segment(分段锁)来实现并发安全的,JDK1.8改用CAS和synchronized来实现的。我们这次主要分析JDK1.8中的实现方式。2020-01-14