java多线程
ssjiyi
这个作者很懒,什么都没留下…
展开
-
synchronize的实现原理(偏向锁)
1 介绍 当一个线程试图访问同步的代码时,会首先尝试获取锁。执行完毕或者抛出异常的时候会主动释放锁。否则会一直阻塞着。 1.1 实现原理 从JVM规范中可以看到synchronize的实现主要是基于monitor对象来实现的。monitorenter是在编译后插入同步代码开始的位置,而monitorexit是在代码的结束处和异常处。任何一个对象都有一个monitor原创 2016-05-24 11:31:49 · 3278 阅读 · 0 评论 -
ConcurrentHashMap源码分析
什么要使用ConcurrentHashMap在并发编程中使用HashMap可能导致程序死循环。而使用线程安全的HashTable效率又非常低下,基于以上两个原因,便有了ConcurrentHashMap的登场机会。ConcurrentHashMap是线程安全且高效的HashMapConcurrentHashMap的锁分段技术可有效提升并发访问率HashTable容器在竞争激原创 2016-05-27 10:48:47 · 986 阅读 · 0 评论 -
ReentrantLock 和 Condition的使用
ReentrantLock ReentrantLock可以等同于synchronized使用。ReentrantLock 类实现了Lock ,它拥有与synchronized 相同的并发性和内存语义,但是添加了类似锁投票、定时锁等候和可中断锁等候的一些特性。此外,它还提供了在激烈争用情况下更佳的性能。(换句话说,当许多线程都想访问共享资源时,JVM 可以花更少的时候来调度线程,把更原创 2016-05-27 10:06:46 · 2624 阅读 · 0 评论 -
semaphore
使用场景并发访问同一个资源的时候。可以控制同时访问的数量原创 2016-05-26 17:41:50 · 921 阅读 · 0 评论 -
cyclicBarrier
import java.io.IOException;import java.util.Random;import java.util.concurrent.BrokenBarrierException;import java.util.concurrent.CyclicBarrier;import java.util.concurrent.ExecutorService;import原创 2016-05-26 17:34:00 · 883 阅读 · 0 评论 -
CountDownLatch
主要方法 public CountDownLatch(int count); public void countDown(); public void await() throws InterruptedExceptionimport java.util.concurrent.CountDownLatch;import java.util.concurrent.Exe原创 2016-05-26 17:24:46 · 854 阅读 · 0 评论 -
双重检查锁定与延迟初始化
在Java程序中,有时候可能需要推迟一些高开销的对象初始化操作,并且只有在使用这些对象时才进行初始化。此时,程序员可能会采用延迟初始化。但要正确实现线程安全的延迟初始化需要一些技巧,否则很容易出现问题。比如,下面是非线程安全的延迟初始化对象的示例代码。原创 2016-05-26 11:37:50 · 953 阅读 · 0 评论 -
多线程 happens-before规则
简介 Java使用新的JSR-133内存模型,JSR-133使用happens-before的概念来阐述操作之间的内存可见性。在JMM中,如果一个操作执行的结果需要对另一个操作可见,那么这两个操作之间必须要存在happens-before关系。这里提到的两个操作既可以是在一个线程之内,也可以是在不同线程之间规则 1、程序顺序规则:在一个单独的线程中,按照程序原创 2016-05-25 10:55:17 · 3502 阅读 · 0 评论 -
java多线程之指令重排序
重排序 在执行程序时,为了提高性能,编译器和处理器常常会对指令做重排序。重排序分3种类型。1)编译器优化的重排序。编译器在不改变单线程程序语义的前提下,可以重新安排语句的执行顺序。2)指令级并行的重排序。现代处理器采用了指令级并行技术(Instruction-Level Parallelism,ILP)来将多条指令重叠执行。如果不存在数据依赖性,处理器可以改变语句对应机器指令的执行原创 2016-05-25 11:21:56 · 1823 阅读 · 0 评论 -
java内存模型
简介在并发编程中,需要处理两个关键问题:线程之间如何通信及线程之间如何同步(这里的线程是指并发执行的活动实体)。通信是指线程之间以何种机制来交换信息。在命令式编程中,线程之间的通信机制有两种:共享内存和消息传递。 在共享内存的并发模型里,线程之间共享程序的公共状态,通过写-读内存中的公共状态进行隐式通信。在消息传递的并发模型里,线程之间没有公共状态,线程之间必须通过发送消原创 2016-05-25 11:12:43 · 988 阅读 · 0 评论 -
java7 fork-join
什么是Fork/Join框架Fork/Join框架是Java 7提供的一个用于并行执行任务的框架,是一个把大任务分割成若干个小任务,最终汇总每个小任务结果后得到大任务结果的框架Fork/Join使用两个类来完成以上两件事情。①ForkJoinTask:我们要使用ForkJoin框架,必须首先创建一个ForkJoin任务。它提供在任务中执行fork()和join()操作的机制。通常情原创 2016-05-27 14:14:23 · 1177 阅读 · 0 评论