摘要:
在并发编程时总会遇到一种这样的场景:等待一系列任务做完后,才能开始做某个任务。当遇到这种场景时,两个类cross our mind:CountDownLatch和CyclicBarrier。下面从使用方法和内部实现原理分别对这两个类做出介绍。 使用方法 CountDownLatch 任务 在完成每一 阅读全文
摘要:
ps:在下文中分别以Array代表ArrayBlockingQueue,Link代表LinkedBlockingQueue,下文中不再说明。 Array和Link在并发场景中经常使用,他们的共同作用就是实现线程安全队列。下面对这两种队列的实现进行对比分析。 底层实现 ArrayBlockingQue 阅读全文
摘要:
根据自己对hashMap的理解,基于数组加链表实现了一个HashMap。 下面给出源码:https://github.com/XiaoheXu/hotchpotch/blob/master/src/main/java/com/chris/java/collections/HashMap.java 单 阅读全文
摘要:
volatile 保证此变量对所有线程的可见性。 这个可见性是指,当一个线程读取volatile修饰的变量时,永远读取的都是最后一个线程写回主内存的最新值。某个线程在读取数据之后,另一个线程对变量值做了修改,这个线程是不知道的,这就导致当前线程读取的值是过期的,当前线程将过期的数据经过计算写回主内存 阅读全文
摘要:
这个是一个很常见的算法,在剑指offer中有详细的讲解,在这里提供一种优化的 "实现" 。该实现的优点是不需要每次在数据出列时,将数据copy到另一个堆栈中。并写了其对应的 "单元测试" 。 主要思想 主要实现是在类中定义了两个全局变量,标明当前队列中两个栈的状态, isMain 表示现在数据存储在 阅读全文
摘要:
当我们兴致勃勃的安装完erlang和rabbitMQ。准备爽一下的时候,发现在执行一些rabbitmqctl list_users命令时总是报错。 报错信息如下: 看了图片以后会发现授权失败的提示信息。再往下看就会看到当前rabbitMQ的Erlang cookies hash。 这个报错信息是因为 阅读全文
摘要:
发现问题 当写下这行代码时,程序会注定运行失败。 错误信息:java.lang.OutOfMemoryError: Requested array size exceeds VM limit. 而且在jdk源码中总会看到类似这样的定义: 分析问题 看注释可以了解到,jvm会为数组头信息保留一些空间。 阅读全文
摘要:
简介 Vector 看上去想一个可增长的数组,可以使用索引访问。他的size随着添加或删除item可大可小。Vector为了优化存储,保存着capacity和capacityIncrement两个变量。capacity最小为vector当前的大小。一般比vector的size要大,当有有数据添加到v 阅读全文
摘要:
RabbitMQ作为应用程序之间通信的工具,越来越受欢迎,下面结合介绍一下RabbitMQ中一些简单的概念。建议初学者可以看一下 "RabbitMQ官方教程" 和官方在GitHub上提供的 "样例代码" 。 几个重要概念 生产者 生产者也叫客户端,不是RabbitMQ的一部分,他创建消息,并将消息发 阅读全文
摘要:
如果说算法,数据结构是编码术的层面,那么设计模式则是编码中的道。 定义 模板设计模式,定义一组算法的框架,这些算法的步骤大致相同。而将这些算法中不同的步骤延迟到子类中实现。 例子 我们在日常生活中使用的料理机时,先将原材料经过初步处理(打豆浆,需要泡豆子;榨果汁,需要提前将水果洗好),然后打开料理机 阅读全文