代码改变世界

随笔分类 - java 并发

自旋锁、排队自旋锁、MCS锁、CLH锁

2015-10-26 13:11 by Loull, 496 阅读, 收藏, 编辑
摘要: 自旋锁(Spin lock)自旋锁是指当一个线程尝试获取某个锁时,如果该锁已被其他线程占用,就一直循环检测锁是否被释放,而不是进入线程挂起或睡眠状态。自旋锁适用于锁保护的临界区很小的情况,临界区很小的话,锁占用的时间就很短。简单的实现import java.util.concurrent.atomi... 阅读全文

SpinLock 实现

2015-10-26 11:50 by Loull, 419 阅读, 收藏, 编辑
摘要: /* Example: SpinLock Description: SpinLock is the lock implementation using AtomicInteger as a primitive synchronizer. The contracts is based on the... 阅读全文

ForkJoin框架

2014-08-12 12:57 by Loull, 2395 阅读, 收藏, 编辑
摘要: 1. 什么是Fork/Join框架Fork/Join框架是Java7提供了的一个用于并行执行任务的框架, 是一个把大任务分割成若干个小任务,最终汇总每个小任务结果后得到大任务结果的框架。我们再通过Fork和Join这两个单词来理解下Fork/Join框架,Fork就是把一个大任务切分为若干子任务并行... 阅读全文

【转】线程、Thread类和线程终止

2014-07-04 19:57 by Loull, 2229 阅读, 收藏, 编辑
摘要: 一、线程Thread启动0. Thread类实现了java.lang.Runnable接口,即实现了run方法。虽然在Sun JDK中,start()调用了start0()方法,start0()方法又是native的,但实际上新的线程就是调用了Thread的run()方法,当然这native的实现中... 阅读全文

java.util.concurrent包

2014-07-04 19:34 by Loull, 457 阅读, 收藏, 编辑
摘要: 在JavaSE5中,JUC(java.util.concurrent)包出现了在java.util.concurrent包及其子包中,有了很多好玩的新东西:1、执行器的概念和线程池的实现。Executor、ExecutorService框架 从Executor接口开始,到ExecutorServi... 阅读全文

Java CAS 和ABA问题

2014-06-03 23:42 by Loull, 51795 阅读, 收藏, 编辑
摘要: 独占锁:是一种悲观锁,synchronized就是一种独占锁,会导致其它所有需要锁的线程挂起,等待持有锁的线程释放锁。乐观锁:每次不加锁,假设没有冲突去完成某项操作,如果因为冲突失败就重试,直到成功为止。一、CAS 操作乐观锁用到的机制就是CAS,Compare and Swap。CAS有3个操作数... 阅读全文

ObjectMonitor,ObjectWaiter 实现wait(),notify()

2014-04-25 15:14 by Loull, 3383 阅读, 收藏, 编辑
摘要: 0、java对象锁监视器在JVM的规范中,有这么一些话:“在JVM中,每个对象和类在逻辑上都是和一个监视器相关联的”“为了实现监视器的排他性监视能力,JVM为每一个对象和类都关联一个锁”“锁住了一个对象,就是获得对象相关联的监视器”监视器好比一做建筑,它有一个很特别的房间,房间里有一些数据,而且在同... 阅读全文

Java线程同步和线程通信

2014-04-24 23:58 by Loull, 1469 阅读, 收藏, 编辑
摘要: 一、线程同步 当多个线程访问同一个数据时,非常容易出现线程安全问题。这时候就需要用线程同步。 不可变类总是线程安全的,因为它的对象状态是不可改变的,但可变类对象需要额外的方法来保证线程安全。1、同步监视器 释放同步监视器的锁定 任何线程进入同步代码块、同步方法之前,... 阅读全文

Java Thread线程控制

2014-04-24 23:40 by Loull, 1208 阅读, 收藏, 编辑
摘要: 一、线程和进程 进程是处于运行中的程序,具有一定的独立能力,进程是系统进行资源分配和调度的一个独立单位。进程特征: A、独立性:进程是系统中独立存在的实体,可以拥有自己独立的资源,每个进程都拥有自己的私有地址地址。在没有经过进程本身允许的情况下,一个用户进程不可以访问其他进程地址空间。 ... 阅读全文