理清 CountDownLatch 与 CyclicBarrier 的区别

对于刚接触信号量同学来说,CountDownLatch 和 CyclicBarrier 应该是两个比较容易混淆的组件,它们都能表示让多个线程等待某个特定事件的语义,不过在功能上还是存在一些差别,实际上它们的 关键区别在于参与的线程是否需要阻塞相互等待一起到达事件的位置,然后再继续向下执行。 这句话不是很好理解,我们通过例子来进行说明,首先来看一下 CountDownLatch。我们可以简单将其理解为一个计数器,当初始化一个 count=n 的 CountDownLatch 对象之后,需要调用该对象的 countDown() 方法来对计数器进行减值,直到计数器为 0 的时候,等待该计数器的线程才能继续执行。但是需要注意的一点是,执行 countDown() 方法的线程在执行完减值之后,并不会因此而阻塞。真正阻塞等待事件的是调用 CountDownLatch 对象 await() 方法的线程,该线程一直会阻塞直到计数器计数为 0 为止。

阅读全文

Java 并发编程:基础篇

一. 线程相关的基本概念1.1 线程的状态线程可以有 6 种状态(如下图所示),定义在 java.lang.Thread.State 枚举中,我们调用线程对象的 getState 方法来获取线程的当前状态。当我们 new 一个线程的时候,这个线程只是被 创建,还未开始运行,只有当我们调用了 start 方法之后,线程才进入 可运行 状态,这个时候线程不是马上开始运行,而是需要等待 CPU 的时间片。可运行状态包含等待 CPU 调度和处于运行两种状态,没有专门的运行态一说。

阅读全文

转载:Cookies 中的那些事儿

HTTP cookies,通常称之为 “cookie”,已经存在很长时间了,但是仍然没有被充分理解。首要问题是存在许多误解,认为 cookie 是后门程序或病毒,却忽视了其工作原理。第二个问题是,对于 cookie 的操作缺少统一的接口。尽管存在这些问题,cookie 仍旧在 Web 开发中扮演者重要的角色,以至于如果没有出现相应的代替品就消失的话,我们许多喜欢的 Web 应用将变的不可用。

阅读全文

Spring 框架配置使用指南

本篇用于记录 Spring 框架的配置使用方式,持续更新… 当前支持版本:4.x 一些需要注意的知识点: BeanFactory 在初始化容器时并未实例化 bean,直到第一次访问时才真正实例化对应的 bean,而 ApplicationContext 则在初始化上下文时就完成所有 singleton bean 的实例化过程。

阅读全文

模式匹配:KMP 算法

KMP 算法是在给定字符串中检索目标字符串的算法,该算法由Knuth、Morris 和 Pratt 三人在 Brute-Force 算法的基础上提出的模式匹配改进算法。该算法消除了 Brute-Force 在进行匹配时,只要遇到不相等字符就需要回退到本次比较起始位置的后一个位置继续开始新一轮的比较的缺点,这样的回退就把过程中所有的比较操作的时间付出全部给否定了,KMP 算法则正是需要在匹配失败时,利用之前的匹配结果,再不回退的情况下开始新的一轮比较,KMP 总会将目标字符串向前移动到合适的位置,保证当前指针前的字符串都是匹配的。

阅读全文

Powered by hexo & Theme by hiero   Copyright © 2015-2019 浙ICP备 16010916  号,指 · 间 All Rights Reserved.