06 2020 档案
摘要:1、概要 ZooKeeper是用于分布式应用程序的协调服务。它公开了一组简单的API,分布式应用程序可以基于这些API用于同步,节点状态、配置等信息、服务注册等信息。其由JAVA编写,支持JAVA 和C两种语言的客户端。 zookeeper 中数据基本单元叫节点,节点之下可包含子节点,最后以树级方式
阅读全文
摘要:HashMap Java7,HashMap 会产生死锁; 数据模型:数组 + 链表 Java8,HashMap 不会产生死锁,同时put有可能会产生数据丢失的情况;数据模型:数组 + 链表 + 红黑树 JAVA7 HashMap死锁的原因:hashMap在多线程的场景下,扩容期间存在节点位置互换指针
阅读全文
摘要:ScheduledThreadPoolExecutor 提交的任务按照执行的时间排序放入到 DelayQueue 队列中。 DelayQueue内部封装了一个PriorityQueue,它会根据time的先后时间排序(time小的排在前面),若time相同则根据sequenceNumber排序( s
阅读全文
摘要:一、概念 Fork/Join 框架是 Java7 提供了的一个用于并行执行任务的框架, 是一个把大任务分割成若干个小任务,最终汇总每个小任务结果后得到大任务结果的框架。Fork 就是把一个大任务切分为若干子任务并行的执行,Join 就是合并这些子任务的执行结果,最后得到这个大任务的结果。 Fork/
阅读全文
摘要:1. 线程的实现方式 讲线程池之前我们先看一下线程的实现方式: Thread,Runnable,Callable // 实现Runnable接口的类将被Thread执行,表示一个基本的任务 public interface Runnable { // run方法就是它所有的内容,就是实际执行的任务
阅读全文
摘要:一、BlockingQueued BlockingQueued 队列使用 ReentrantLock 和 Condition(AQS实现)来实现的。Condition 只能用于独占模式。 条件队列中的节点永远不会被唤醒,一直阻塞者;要想唤醒,则需要把该节点放到CLH队列中,放入到CLH队列中才有机会
阅读全文
摘要:1、Automic Java中 Atomic 是指一个操作是不可中断的。即使是在多个线程一起执行的时候,一个操作一旦开始,就不会被其他线程干扰。 所谓原子类说简单点就是具有原子/原子操作特征的类。Java从JDK1.5开始提供了java.util.concurrent.atomic包,方便程序员在多
阅读全文
摘要:1、Semaphore Semaphore(信号量)是用来控制同时访问特定资源的线程数量,它通过协调各个线程,以保证合理的使用公共资源,它是共享锁的方式。 Semaphore可以用于做流量控制,特别是公用资源有限的应用场景。 1.1 构造方法 public Semaphore(int permits
阅读全文
摘要:一、AQS的概念及使用 Java并发编程核心在于 java.concurrent.util 包而juc当中的大多数同步器实现都是围绕着共同的基础行为,比如等待队列、条件队列、独占获取、共享获取等,而这个行为的抽象就是基于 AbstractQueuedSynchronizer 简称AQS,AQS定义了
阅读全文
摘要:多线程编程中,有可能会出现多个线程同时访问同一个共享、可变资源的情况;这种资源可能是:对象、变量、文件等。 由于线程执行的过程是不可控的,所以需要采用同步机制来协同对对象可变状态的访问,那么我们怎么解决线程并发安全问题? 实际上,所有的并发模式在解决线程安全问题时,采用的方案都是 序列化访问临界资源
阅读全文