Java 原生支持并发,基本的底层同步包括:
synchronized,用来标示一个方法(普通,静态)或者一个块需要同步执行(某一时刻,只允许一个线程在执行代码块)。
volatile,用来标识一个变量是共享变量(线程不缓存),更新和读取是原子的。
wait,线程等待某一个Object上的事件(notify事件,线程挂起,释放锁),需要在synchronized区中执行。
notify,事件发生后,通知事件,通知一个挂起的线程,需要在synchronized区中执行。
notifyAll,事件发生后,通知所有挂起线程,需要在synchronized区中执行。

Java 并发编程的工具类位于java.util.concurrent包下的,可分为以下几类:
(1)执行单元
Runnable,标识一个类为可执行单元的接口,不关心子线程的返回结果和异常状态(FunctionalInterface)。
Callable,标识一个类为可执行单元的接口,需要知道子线程的返回结果和异常状态(FunctionalInterface)。
Future, Callable执行的结果。
Thread,线程(Runnalbe默认实现类)。

(2)同步器
Java同步器,是若干用于多线程之间同步的类,它们都位于java.util.concurrent包下:
CountDownLatch,闭锁,用于一个或多个线程等待一个事件集的发生(比如,一组线程与主线程之间的同步)。
CyclicBarrier,关卡,用于一组或几组线程要在时间点上达成一致进行下一步动作。
Exchanger,交换器,用于两个线程之间的同步(数据交换)。
Phaser,移相器,它兼具CountDownLatch和CyclicBarrier的功能,是Java 7中新引进的同步器,其主要特点是支持动态增删线程、单向同步和分相操作。
Semaphore,信号量,用于限定资源多线程访问时的许可管理。

(3)并发数据结构
Queue&Deque:

BlockingQueue,

LinkedBlockingDeque,

BlockingDeque,

LinkedBlockingDeque,

ArrayBlockingQueue,

PriorityBlockingQueue,

ConcurrentLinkedDeque,

DelayQueue,

SynchronousQueue,

TransferQueue,

LinkedTransferQueue,

List:

CopyOnWriteArrayList,

Map:

ConcurrentMap,

ConcurrentNavigableMap,

ConcurrentSkipListMap,

ConcurrentHashMap,

Set:

CopyOnWriteArraySet,

ConcurrentSkipListSet

(4)Executor框架集
Executor,
ExecutorService,
Executors,
ExecutorCompletionService,
ScheduledExecutorService,
ScheduledFuture,
ScheduledThreadPoolExecutor,

(5)Fork-Join框架集
ForkJoinTask,
ForkJoinPool,
RecursiveTask,
RecursiveAction,
ForkJoinWorkerThread,

(6)原子变量类(java.util.concurrent.atomic)
AtomicBoolean,
AtomicInteger,
AtomicIntegerArray,
AtomicIntegerFieldUpdater,
AtomicLong,
AtomicLongArray,
AtomicLongFieldUpdater,
AtomicReference,
AtomicReferenceArray,
AtomicReferenceFieldUpdater,
AtomicMarkableReference,
AtomicStampedReference,

(7)Java高级锁(java.util.concurrent.locks)
Lock,
Condition,
AbstractQueuedSynchronizer,
ReentrantLock,
ReadWriteLock,
ReentrantReadWriteLock,
StampedLock,

(8)其它
ThreadLocal,

Java并发编程-总纲的更多相关文章

  1. 【Java并发编程实战】----- AQS(四):CLH同步队列

    在[Java并发编程实战]-–"J.U.C":CLH队列锁提过,AQS里面的CLH队列是CLH同步锁的一种变形.其主要从两方面进行了改造:节点的结构与节点等待机制.在结构上引入了头 ...

  2. 【Java并发编程实战】----- AQS(三):阻塞、唤醒:LockSupport

    在上篇博客([Java并发编程实战]----- AQS(二):获取锁.释放锁)中提到,当一个线程加入到CLH队列中时,如果不是头节点是需要判断该节点是否需要挂起:在释放锁后,需要唤醒该线程的继任节点 ...

  3. 【Java并发编程实战】----- AQS(二):获取锁、释放锁

    上篇博客稍微介绍了一下AQS,下面我们来关注下AQS的所获取和锁释放. AQS锁获取 AQS包含如下几个方法: acquire(int arg):以独占模式获取对象,忽略中断. acquireInte ...

  4. 【Java并发编程实战】-----“J.U.C”:CLH队列锁

    在前面介绍的几篇博客中总是提到CLH队列,在AQS中CLH队列是维护一组线程的严格按照FIFO的队列.他能够确保无饥饿,严格的先来先服务的公平性.下图是CLH队列节点的示意图: 在CLH队列的节点QN ...

  5. 【Java并发编程实战】-----“J.U.C”:CountDownlatch

    上篇博文([Java并发编程实战]-----"J.U.C":CyclicBarrier)LZ介绍了CyclicBarrier.CyclicBarrier所描述的是"允许一 ...

  6. 【Java并发编程实战】-----“J.U.C”:CyclicBarrier

    在上篇博客([Java并发编程实战]-----"J.U.C":Semaphore)中,LZ介绍了Semaphore,下面LZ介绍CyclicBarrier.在JDK API中是这么 ...

  7. 【Java并发编程实战】-----“J.U.C”:ReentrantReadWriteLock

    ReentrantLock实现了标准的互斥操作,也就是说在某一时刻只有有一个线程持有锁.ReentrantLock采用这种独占的保守锁直接,在一定程度上减低了吞吐量.在这种情况下任何的"读/ ...

  8. Java并发编程:volatile关键字解析

    Java并发编程:volatile关键字解析 volatile这个关键字可能很多朋友都听说过,或许也都用过.在Java 5之前,它是一个备受争议的关键字,因为在程序中使用它往往会导致出人意料的结果.在 ...

  9. JAVA并发编程J.U.C学习总结

    前言 学习了一段时间J.U.C,打算做个小结,个人感觉总结还是非常重要,要不然总感觉知识点零零散散的. 有错误也欢迎指正,大家共同进步: 另外,转载请注明链接,写篇文章不容易啊,http://www. ...

随机推荐

  1. wordpress可视化编辑器的开启/关闭

    这个可视化编辑器还真是有些难找,在后台菜单“用户”->"我的个人资料" 对以下勾选即可

  2. JBoss7配置指南

    JBoss7配置指南   1.    jboss各主要版本特性... 3 1.1.     jboss4特性... 3 1.2.     jboss5特性... 5 1.3.     jboss6特性 ...

  3. Bootstrap学习笔记之整体架构

    之前有粗略地看过一下Bootstrap的内容,不过那只是走马观花式地看下是怎么用的,以及里面有什么控件,所以就没想着记笔记.现在由于要给部门做分享,所以不得不深入地去学习下,不然仅是简单地说下怎么用, ...

  4. C# 窗体间传值方法大汇总

    第一种方法:创建一个类,里面声明用于存储接收的字段.传的时候存储于字段中,要用的时候,直接类名.字段名 进行调用.(这种方法传递是双向的) 第二种方法:1.在Form1里定义 public strin ...

  5. ccnu-线段树联系-单点更新2-B

    B - 单点更新2 Time Limit:3000MS Memory Limit:32768KB 64bit IO Format:%I64d & %I64u Submit Status Des ...

  6. 【转】 xcode中常用快捷键图文并茂解释

    图文解释XCode常用快捷键的使用 分类: iOS开发经验技巧2012-06-07 10:21 12774人阅读 评论(6) 收藏 举报 xcodecommand工具eclipsedeletego 刚 ...

  7. java之并发

    一.线程 在java中多线程执行任务,主要有两种方式,一种是通过继承Thread类,重写run方法,优点是比较方便的创建一个线程,缺点是java中每个类只能有一个基类,所有继承了T火热ad类后,就不能 ...

  8. 3D场景优化

    一) 有效的性能评测 对于任何一个3D应用程序来说,追求场景画面真实感是一个无止尽的目标,其结果就是让我们的场景越来越复杂,模型更加精细,这必然给图形硬件带来极大的负荷以致于无法达到实时绘制帧率.因此 ...

  9. web开发workflow

    web development是一个创建和实施一个新的互联网展示的过程,web网站可以是个非常成熟包罗万象的网站,也可以只是一个blog或者一两个页面.如果未做好充分的准备,web开发将是一个非常复杂 ...

  10. FireMonkey 平台初探

    最为第一个本地化跨平台的框架:FireMonkey需要处理以及融合不同平台的技术非常之多,所以目前的测试仅仅在于表面现象,至于效率问题还不得而知. 从一个程序员的角度来看这个框架,我觉得有以下这些方面 ...