当前位置:嗨网首页>书籍在线阅读

02-简介

  
选择背景色: 黄橙 洋红 淡粉 水蓝 草绿 白色 选择字体: 宋体 黑体 微软雅黑 楷体 选择字体大小: 恢复默认

3.1 简介

在第2章中,我们介绍了同步的基本概念。通常,只有在任务并发地访问共享资源(如一个对象的属性值)时,才需要考虑同步控制,以保证不同的任务能正确访问同一资源。访问的这个共享资源的代码块,被称为临界区。

如果没有使用恰当的控制机制进行同步处理,那么就有可能得到错误的结果,产生数据不一致或者异常等问题。因此,我们需要使用Java API提供的同步机制来避免这些问题的出现。

在第2章中,我们介绍了下列3种基本的同步机制。

  • synchronized 关键字。
  • Lock 接口及其实现类: ReentrantLockReentrantReadWriteLock.ReadLockReentrantReadWriteLock.writeLock
  • StampedLock 类。

本章将介绍使用高级同步机制来实现多线程同步的方法。有如下所示的高级同步机制。

  • Semaphore: 这是一个计数器,用来控制一个或多个共享资源的访问。这是一种基本并发编程工具,为大多数编程语言所支持。
  • CountDownLatch: CountDownLatch 类是Java语言提供的一个机制,可以使一个线程等待多个操作结束。
  • CyclicBarrier: CyclicBarrier 类是Java语言提供的另一个机制,可以使多个线程在一个共同状态点同步。
  • Phaser: Phaser 类也是Java语言提供的另一个机制,可以分阶段地控制并发任务的执行。只有所有的线程都完成一个阶段后,才能继续下一个阶段。
  • Exchanger: Exchanger 类也是Java语言提供的另一个机制,能够使得两个线程在某一点进行数据交换。
  • CompletableFuture: CompletableFuture 类提供了一个机制,在这个机制中一个或多个任务等待另外一些任务执行结束,并且这些任务将以异步方式运行。这个类在Java 8中引入,Java 9中新增了一些方法。

Semaphore是一种通用的同步机制,适用于任意问题的临界区保护。而其他同步机制,一般适用于前述的特定场景。因此,需要根据应用的特点来选取合适的同步机制。

本章的各个小节分别展示了这些同步机制的使用方法。