
多线程
文章平均质量分 82
风云叶易
年轻没有失败
展开
-
CLH锁
CLH锁即Craig, Landin, and Hagersten (CLH) locks,CLH锁是一个自旋锁,能确保无饥饿性,提供先来先服务的公平性。CLH锁也是一种基于链表的可扩展、高性能、公平的自旋锁,申请线程只在本地变量上自旋,它不断轮询前驱的状态,如果发现前驱释放了锁就结束自旋。SMP(Symmetric Multi-Processor),即对称多处理器转载 2016-10-10 14:21:17 · 809 阅读 · 0 评论 -
如何为JVM添加关闭钩子与简要分析
最近在看当当开源的数据库分库分表框架Sharding-jdbc的源码,在看ExecutorEngine类时,遇到了很多没用过的JDK api,Sharding-jdbc内部大量的使用了google的工具包Guava。在ExecutorEngine类处理多线程问题部分也同样用到的Guava下面的util.concurrent包的类进处理。而我在看google的Guava的MoreExecutors时便遇到了Runtime.getRuntime().addShutdownHook(hook)。原创 2016-09-30 18:12:48 · 4397 阅读 · 0 评论 -
google Guava包的ListenableFuture解析
并发编程是一个难题,但是一个强大而简单的抽象可以显著的简化并发的编写。出于这样的考虑,Guava 定义了 ListenableFuture接口并继承了JDK concurrent包下的Future 接口。我们强烈地建议你在代码中多使用ListenableFuture来代替JDK的 Future, 因为:大多数Futures 方法中需要它。转到ListenableFuture原创 2016-09-30 13:44:09 · 7228 阅读 · 0 评论 -
深入 Java 内存模型(2)
深入 Java 内存模型(2)主内存与工作内存Java 内存模型的主要目标是定义程序中各个变量的访问规则,即在虚拟机中将变量存储到内存和从内存中取出变量这样的底层细节。此处的变量主要是指共享变量,存在竞争问题的变量。Java 内存模型规定所有的变量都存储在主内存中,而每条线程还有自己的工作内存,线程的工作内存中保存了该线程使用到的变量的主内存副本拷贝,线程对变量的所有操作(读取、赋转载 2016-09-30 12:03:58 · 328 阅读 · 0 评论 -
并发新特性—信号量 Semaphore
并发新特性—信号量 Semaphore在操作系统中,信号量是个很重要的概念,它在控制进程间的协作方面有着非常重要的作用,通过对信号量的不同操作,可以分别实现进程间的互斥与同步。当然它也可以用于多线程的控制,我们完全可以通过使用信号量来自定义实现类似 Java 中的 synchronized、wait、notify 机制。Java 并发包中的信号量 Semaphore 实际上是一个功转载 2016-09-30 10:53:42 · 413 阅读 · 0 评论 -
并发新特性—障碍器 CyclicBarrier
并发新特性—障碍器 CyclicBarrierCyclicBarrier(又叫障碍器)同样是 Java 5 中加入的新特性,使用时需要导入java.util.concurrent.CylicBarrier。它适用于这样一种情况:你希望创建一组任务,它们并发地执行工作,另外的一个任务在这一组任务并发执行结束前一直阻塞等待,直到该组任务全部执行结束,这个任务才得以执行。这非常像 CountDo转载 2016-09-30 10:48:27 · 324 阅读 · 0 评论 -
并发新特性—阻塞队列与阻塞栈
并发新特性—阻塞队列与阻塞栈阻塞队列阻塞队列是 Java 5 并发新特性中的内容,阻塞队列的接口是 java.util.concurrent.BlockingQueue,它有多个实现类:ArrayBlockingQueue、DelayQueue、LinkedBlockingQueue、PriorityBlockingQueue、SynchronousQueue 等,用法大同小异,具转载 2016-09-30 09:53:07 · 391 阅读 · 0 评论 -
并发新特性—Lock 锁与条件变量
并发新特性—Lock 锁与条件变量简单使用 Lock 锁Java 5 中引入了新的锁机制——java.util.concurrent.locks 中的显式的互斥锁:Lock 接口,它提供了比synchronized 更加广泛的锁定操作。Lock 接口有 3 个实现它的类:ReentrantLock、ReetrantReadWriteLock.ReadLock 和 ReetrantR转载 2016-09-30 09:19:38 · 876 阅读 · 0 评论 -
CountDownLatch、CyclicBarrier、Semaphore共同之处与区别以及各自使用场景
摘要: jdk1.5之后,java的concurrent包提供了一些并发工具类,比如CountDownLatch和CyclicBarrier,Semaphore。这里简要的比较一下他们的共同之处与区别,同时介绍一下他们的使用场景。 CountDownLatch:一个线程A或是组线程A等待其它线程执行完毕后,一个线程A或是组线程A才继续执行。CyclicBarrier:一组线程使用await()原创 2016-10-26 10:55:09 · 9329 阅读 · 3 评论 -
并发新特性—Executor 框架与线程池
Executor 框架简介在 Java 5 之后,并发编程引入了一堆新的启动、调度和管理线程的API。Executor 框架便是 Java 5 中引入的,其内部使用了线程池机制,它在 java.util.cocurrent 包下,通过该框架来控制线程的启动、执行和关闭,可以简化并发编程的操作。因此,在 Java 5之后,通过 Executor 来启动线程比使用 Thread 的 start原创 2016-09-29 17:44:24 · 357 阅读 · 0 评论 -
ExecutorService的十个使用技巧
1. 线程命名这点得反复强调。对正在运行的JVM进行线程转储(thread dump)或者调试时,线程池默认的命名机制是pool-N-thread-M,这里N是线程池的序号(每新创建一个线程池,这个N都会加一),而M是池 里线程的序号。比方说,pool-2-thread-3指的是JVM生命周期中第二个线程池里的第三个线程。这样的名字表述性不佳。由于JDK将命名机制都隐藏在 Thread转载 2016-09-29 17:30:07 · 2162 阅读 · 0 评论 -
CLH锁与MCS锁
一。引文1.1 SMP(Symmetric Multi-Processor)对称多处理器结构,指服务器中多个CPU对称工作,每个CPU访问内存地址所需时间相同。其主要特征是共享,包含对CPU,内存,I/O等进行共享。SMP能够保证内存一致性,但这些共享的资源很可能成为性能瓶颈,随着CPU数量的增加,每个CPU都要访问相同的内存资源,可能导致内存访问冲突,可能会导致C转载 2017-06-14 09:44:36 · 2560 阅读 · 0 评论