基于锁分段机制的 ConcurrentHashMap 实现内幕

ConcurrentHashMap 是线程安全的 HashMap。此前,HashTable 一直被认为是线程安全的 HashMap,ConcurrentHashMap 相对于 HashTable 采用了 锁分段机制,即将原本对整个对象加锁的实现进行粒度细化。这也是源于 HashMap 基本的存储特性,因为许多读写请求都是被哈希到了互相独立的区域,这种情况下即使并发读写也不会相互影响,更不会有线程安全问题,而对于操作加全局锁的实现方式显然是浪费了这一天然的并发优势,我们需要加锁的位置是真正存在竞争的地方,而分段锁很好的利用了这一特点。

阅读全文

Java 异常处理机制与最佳实践

这周小组内的学习是探讨 java 异常处理的最佳实践,今天周末,外面太闷,宅在家里对 java 的异常处理的个人立即做一个总结,如有不对的地方欢迎指正~ 一. 谈谈个人对 java 异常处理的看法维基百科对于异常处理的定义是: 异常处理,是编程语言或计算机硬件里的一种机制,用于处理软件或信息系统中出现的异常状况(即超出程序正常执行流程的某些特殊条件)。 java 语言从设计之初就提供了对异常处理的支持,并且不同于其它语言,java 对于异常采取了强校验机制,即对于编译期异常需要 API 调用方显式地对异常进行处理,这种强校验机制被一部分人所钟爱,也有一部分人狂吐槽它。持支持观点的人认为这种机制可以极大的提升系统的稳定性,当存在潜在异常的时候强制开发人员去处理异常,而反对的人则认为强制异常处理降低了代码的可读性,一串串的 try-catch 让代码看起来不够简洁,并且不正确的使用不仅达不到提升系统稳定性的目的,反而成为了 bug 的良好栖息之地。

阅读全文

转载:为什么要使用 slf4j 而不是 log4j

每一个 java 程序员都知道日志对于任何一个 java 应用程序,尤其是服务端程序是至关重要的,而很多程序员也已经熟悉各种不同的日志库如 java.util.logging、Apache log4j、logback。但如果你还不知道 slf4j(Simple logging facade for Java)的话,那么是时候去在你项目中学习使用 slf4j 了。

阅读全文

理清 CountDownLatch 与 CyclicBarrier 的区别

对于刚接触同步器的同学来说,CountDownLatch 和 CyclicBarrier 应该是两个比较容易混淆的组件,它们都能表示让多个线程等待某个特定事件的语义,不过在功能上还是存在一些差别,实际上它们的 主要区别在于参与的线程是否需要阻塞相互等待一起到达事件的位置,然后再继续向下执行。官方对这两个组件的定义分别如下: CountDownLatch: A synchronization aid that allows one or more threads to wait until a set of operations being performed in other threads completes. CyclicBarrier: A synchronization aid that allows a set of threads to all wait for each other to reach a common barrier point. 看了之后是不是更加迷惑?下面我们通过举例来理清这二者的区别。 CountDownLatch首先来看一下 CountDownLatch,我们可以简单将其理解为一个计数器,当初始化一个 count=n 的 CountDownLatch 对象之后,需要调用该对象的 CountDownLatch#countDown 方法来对计数器进行减值,直到计数器为 0 的时候,等待该计数器的线程才能继续执行。但是需要注意的一点是,执行 CountDownLatch#countDown 方法的线程在执行完减值操作之后,并不会因此而阻塞。真正阻塞等待事件的是调用 CountDownLatch 对象 CountDownLatch#await 方法的线程,该线程一直会阻塞直到计数器计数变为 0 为止。

阅读全文

转载: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.