转载:细聊分布式 ID 的生成方法

需求缘起几乎所有的业务系统,都有生成一个记录标识的需求,例如: 消息标识:message-id 订单标识:order-id 帖子标识:tiezi-id 这个记录标识往往就是数据库中的唯一主键,数据库上会建立聚集索引(cluster index),即在物理存储上以这个字段排序。这个记录标识上的查询,往往又有分页或者排序的业务需求,

阅读全文

基于锁分段机制的 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。我们可以简单将其理解为一个计数器,当初始化一个 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 的实例化过程。

阅读全文

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