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,