跳到主要内容

设计同步器的意义

在多线程编程中,可能会出现多个线程同时访问同一个共享、可变资源的情况,这个资源被称为临界资源。为了保证对临界资源的访问是安全的,需要采用同步机制来协调多个线程对该资源的访问。同步机制可以保证在同一时刻只有一个线程能够访问临界资源,从而避免了数据竞争和并发安全问题。

设计同步器的意义在于提供一种通用的、可重用的同步机制,使得开发人员可以更方便地实现自己的并发控制逻辑。同步器可以看作是一种抽象数据类型,它定义了一组接口和规范,使得开发人员可以通过实现这些接口和规范来定制自己的同步策略。

Java中提供了多种同步器实现,如synchronized、ReentrantLock、Semaphore等。除此之外,Java还提供了一种通用的同步器框架——AQS(AbstractQueuedSynchronizer),它提供了一些基本操作(如获取锁、释放锁等)和状态管理机制,并允许开发人员通过继承AQS类来实现自己的同步器。通过使用AQS框架,开发人员可以更加灵活地设计自己的同步器,从而满足不同场景下的并发控制需求。


文浩MarvinconcurrentSynchronized阅读需 13 分钟

JMM的概念

JMM(Java Memory Model)是Java内存模型的缩写,它定义了Java程序中多线程并发访问共享内存时的行为规范。JMM中的核心概念包括:

  1. 主内存:主内存是所有线程共享的内存区域,所有变量都存储在主内存中。

  2. 工作内存:工作内存是每个线程独有的内存区域,线程执行时会将主内存中的变量复制到自己的工作内存中进行操作。

  3. 内存屏障:内存屏障是一种同步机制,用于保证多线程之间对共享变量的可见性和有序性。在JMM中,读屏障和写屏障分别用于保证读操作和写操作之间的顺序性和可见性。

  4. 原子性:原子性指一个操作不可被中断或分割,要么全部执行成功,要么全部不执行。在JMM中,对基本数据类型(如int、long等)的读写操作具有原子性。

  5. 可见性:可见性指当一个线程修改了某个共享变量后,其他线程能够立即看到这个修改。在JMM中,由于每个线程都有自己独立的工作内存,在修改完共享变量后需要通过同步机制(如锁、volatile关键字等)来保证可见性。

  6. 有序性:有序性指程序执行的顺序与代码编写的顺序一致。在JMM中,由于指令重排的存在,程序执行的顺序可能与代码编写的顺序不一致,需要通过内存屏障来保证有序性。


文浩MarvinconcurrentVolatile阅读需 5 分钟

操作系统整体认识

计算机的五大核心组成部分s

  1. CPU(中央处理器)
  2. 存储器(内存)
  3. 输入设备(如键盘、鼠标)
  4. 输出设备(如显示器、打印机)
  5. I/O 设备(如硬盘、光驱)

文浩Marvinconcurrent阅读需 13 分钟