坦GA
积沙成塔
展开
-
Java并发编程中并发容器ConcurrentHashMap和CopyOnWriteArrayList
JDK 5 中加入的ConcurrentHashMap:用来替代同步且基于散列的MapCopyOnWriteArrayList:用于在遍历操作为主要操作的情况下替代同步的ListConcurrentMap:“若没有则添加”、替换、有条件删除Queue:用来临时保存一组待处理的元素,Queue上的操作不会阻塞,如果队列为空,那么获取元素的操作将返回空值。虽然可以用List来模拟Que原创 2016-08-11 13:52:30 · 2914 阅读 · 1 评论 -
Java并发编程中Executor框架
在Java类库中,任务执行的主要抽象不是Thread,而是Executor。Executor源代码如下:public interface Executor { void execute(Runnable command);}它提供了一种标准的方法将任务的提交过程与执行过程解耦开来,并用Runnable来表示任务。Executor的实现还提供了对生命周期的支持以及统计信息收集、应原创 2016-08-11 15:59:38 · 2430 阅读 · 0 评论 -
Java锁优化
锁优化技术:适应性自旋(Adaptive Spinning)、锁消除(Lock Elimination)、锁粗化(Lock Coarsening)、轻量级锁(Lightweight Locking)和偏向锁(Biased Locking)等。这些技术都是为了在线程之间更高效地共享数据,以解决竞争问题,从而提高程序的执行效率。1.自旋锁和自适应自旋如果物理机器有一个以上的处理器,能让两个原创 2016-08-14 09:04:29 · 2254 阅读 · 0 评论 -
Java硬件对并发的支持
独占锁是一项悲观技术--它假设最坏的情况(如果不锁门,那么捣蛋鬼就会闯入并搞的一团糟),并且只有在确保其它线程不会造成干扰(通过获取正确的锁)的情况下才能执行下去。在早期的处理器中支持原子的测试并设置(Test-and-Set),获取并递增(Fetch-and-Increment)以及交换(Swap)等指令。这些命令足以实现各种互斥体,而这些互斥体又可以实现一些更复杂的并发对象。现在,几乎所有原创 2016-08-14 14:36:24 · 976 阅读 · 0 评论 -
Java原子变量类
以下是对《java并发编程实战》一书中相关部分的总结,加深自己的印象。 原子变量比锁的粒度更细,量级更轻,并且对于在多处理器系统上实现高性能的并发代码来说是非常关键的。原子变量将发生竞争的范围缩小到单个变量上,这是你获得的粒度最细的情况(假设算法能够基于这种细粒度来实现)。更新原子变量的快速(非竞争)路径不会比获取锁的快速路径慢,并且通常会更快,而它的慢速路径肯定比锁的慢速路径快,因为它原创 2016-08-14 17:39:29 · 3652 阅读 · 0 评论 -
Java加锁机制
下列代码不是线程安全的,该Servlet在没有足够原子性保证的情况下对其最近计算结果进行缓存(不要这样做)@NotThreadSafepublic class UnsafeCachingFactorizer implements Servlet{ private final AtomicReference lastNumber = new AtomicReference(); priva原创 2016-08-19 21:04:12 · 729 阅读 · 0 评论 -
Lock与ReentrantLock
Lock提供了一种无条件的、可轮询的、定时的、可中断的锁获取操作,所有加锁和解锁的方法都是显式的。Lock接口如下:public interface Lock { void lock(); void lockInterruptibly() throws InterruptedException; boolean tryLock(); boolean try原创 2016-08-20 16:06:31 · 725 阅读 · 0 评论 -
Java并发编程--线程封闭(Ad-hoc、栈、ThreadLocal)
线程封闭(Thread Confinement):仅在单线程内访问数据,不需要同步。常见应用是:JDBC(Java Database Connectivity)的Connection对象。1.Ad-hoc线程封闭 指维护线程封闭性的职责完全由程序实现来承担。Ad-hoc线程封闭是非常脆弱的,因为没有任何一种语言特性,例如可见性修饰符或局部变量,能将对象封闭到目标线程上。 当决定使用原创 2016-08-21 10:51:38 · 4771 阅读 · 0 评论 -
Java内存模型
概述 衡量一个服务性能的高低好坏,每秒事务处理数(Transactions Per Second,TPS) 是最重要的指标之一,它代表着一秒内服务器平均能响应的请求总数,而TPS值与程序的并发能力又有非常密切的关系。 Java内存模型(Java Memory Model,JMM)用来屏蔽掉各种硬件和操作系统的内存访问差异,以实现让Java程序在各种平台下都能达到一致的内存访问效果。J原创 2016-09-02 09:08:52 · 2684 阅读 · 1 评论 -
Java与线程
并发不一定要依赖多线程(如PHP中很常见的多进程并发)。线程的实现 各个线程既可以共享进程资源(内存地址、文件I/O等),又可以独立调度(线程是CPU调度的基本单位)。 每个已经执行start()且还未结束的java.lang.Thread类的实例就代表了一个线程。Thread的所有关键方法都是声明为Native的。在Java API中,一个Native方法往往意味着这个方法没有使原创 2016-09-18 11:29:47 · 1877 阅读 · 2 评论