Java并发
文章平均质量分 92
q294881866
这个作者很懒,什么都没留下…
展开
-
并发控制
并发控制CyclicBarrier CountDownLatch//模拟程序任务场景一测试程序 场景二 Semaphore Semaphore为并发包中提供用于控制某资源同时可以被几个线程访问的类 主要方法: void acquire() 从信号量获取一个许可,如果无可用许可前 将一直...原创 2017-07-10 10:55:49 · 355 阅读 · 0 评论 -
Java一致性的实现
目录一致性CAS(Compare And Swap)Final不可变Synchronized同步Volatile并发包概述一致性Happen Before程序次序规则:在一个单独的线程中,按照程序代码的执行流顺序,(时间上)先执行的操作happen—before(时间上)后执行的操作。 管理锁定规则:一个unlock操作happen—before后面(时间上的...原创 2017-07-10 10:55:22 · 1347 阅读 · 0 评论 -
Java互斥语义的实现
锁对象头(Object Header)HotSpot 虚拟机的对象头包括两部分信息:Mark Word(标记字段)和 Klass Pointer(类型指针) Mark Word 用于存储对象自身的运行时数据,如哈希码(HashCode)、GC分代年龄、锁状态标志、线程持有的锁、偏向线程 ID、偏向时间戳等等。JVM 对象头一般占用两个机器码,在 32-bit JVM 上占用 6...原创 2017-07-10 10:55:25 · 204 阅读 · 0 评论 -
Volatile
Volatile在多线程并发编程中synchronized和volatile都扮演着重要的角色,volatile是轻量级的synchronized,它在多处理器开发中保证了共享变量的"可见性",即当一个线程修改一个共享变量时,另外一个线程能读到这个修改的值。如果volatile变量修饰符使用恰当的话,它比synchronized的使用和执行成本更低,因为它不会引起线程上下文的切换和调度。本文将...原创 2017-07-10 10:55:28 · 984 阅读 · 0 评论 -
Synchronized
SynchronizedSynchronized关键字简洁、清晰、语义明确,因此即使有了Lock接口,使用的还是非常广泛。在HotSpot JVM实现中,锁有个专门的名字:对象监视器。先来看下利用synchronized实现同步的基础:Java中的每一个非null对象都可以作为锁。具体表现为以下3种形式。 对于普通同步方法,锁是当前实例对象。 对于静态同步方法,锁是当前类...原创 2017-07-10 10:55:30 · 204 阅读 · 0 评论 -
Atomic
Atomic原子(atomic)本意是"不能被进一步分割的最小粒子",而原子操作(atomic operation)意为"不可被中断的一个或一系列操作"。在多处理器上实现原子操作就变得有点复杂。让我们一起来聊一聊在Intel处理器和Java里是如何实现原子操作的。术语定义在了解原子操作的实现原理前,先要了解一下相关的术语,如表2-7所示。表2-7 CPU术语定义 ...原创 2017-07-10 10:55:33 · 284 阅读 · 0 评论 -
AbstractQueuedSynchronizer
一般并发包类用内部类Sync来继承并实现互斥语义。为实现依赖于先进先出 (FIFO) 等待队列的阻塞锁和相关同步器(信号量、事件,等等)提供一个框架。此类的设计目标是成为依靠单个原子 int 值来表示状态的大多数同步器的一个有用基础。子类必须定义重写此状态的受保护方法,并定义哪种状态对于此对象意味着被获取或被释放。假定这些条件之后,此类中的其他方法就可以实现所有排队和阻塞机制。子类可以维护其他状态...原创 2017-07-10 10:55:36 · 227 阅读 · 0 评论 -
J.U.C重入锁
ReentrantLock重入锁ReentrantLock是Java并发包中互斥锁,它有公平锁和非公平锁两种实现方式, 重入的意思就是,如果已经获得了锁,如果执行期间还需要获得这个锁的话,会直接获得所,不会被阻塞,获得锁的次数加1;每执行一次unlock,持有锁的次数减1,当为0时释放锁。这点,Synchronized 具有同样语义。 Sync在ReentrantLock中...原创 2017-07-10 10:55:39 · 247 阅读 · 0 评论 -
并发任务
并发类库在关注并发前,我们需要了解一些相关概念。线程与进程运行在系统上的每个程序都是一个进程。一个进程可包含多个线程。进程和线程都表示一个逻辑控制流,即一种计算过程。进程独立占用管理物理资源,线程共享同一个进程中的物理资源和数据。可以采用多进程来实现程序的并发。CPU资源是固定的,CPU通过多线程的切换实现并发。即线程轮流执行一个时间片,实现多个任务同时执行。多线程使用要考虑用户交...原创 2017-07-10 10:55:41 · 396 阅读 · 0 评论 -
JDK线程池的实现
线程池接口Executor该接口只有一个方法,JDK解释如下执行已提交的Runnable 任务的对象。此接口提供一种将任务提交与每个任务将如何运行的机制(包括线程使用的细节、调度等)分离开来的方法。不过,Executor 接口并没有严格地要求执行是异步的。在最简单的情况下,执行程序可以在调用者的线程中立即运行已提交的任务:更常见的是,任务是在某个不是调用者线程的线程中执行的...原创 2017-07-10 10:55:47 · 190 阅读 · 0 评论 -
Java中String的设计
String应用简介前言String字符串在Java应用中使用非常频繁,理解了它在虚拟机中的实现机制能更好的使用它,本文使用的JDK版本为1.8.0_111。 常量池 Java代码被编译成class文件时,会生成一个常量池(Constant pool)的数据结构,用以保存字面常量和符号引用(类名、方法名、接口名和字段名等)。 很简单的一段代码,通过命令 javap -ver...原创 2017-07-10 10:55:20 · 359 阅读 · 0 评论