Advertisement

支持多线程并发访问:信号量(Semaphore)

阅读量:

信号量并非Java语言所独有,它是一种用于支持并发编程的机制。从本质上看,信号量可以被理解为一个具备原子操作特性的计数器。每当某线程获取到资源时,该计数器数值会相应减少一,意味着当前可被访问的资源数量减少了一个单位;而当该线程释放资源后,计数器数值则会增加一,表明系统中可供使用的资源数量又增加了一个单位。

信号量模型分析

信号量模型.png
  1. init:初始化计数器的起始数值。
  2. down:将计数器数值减少1;若此时计数器数值低于0,则当前线程进入阻塞状态,否则当前线程可继续运行。
  3. up:对计数器数值进行加1操作;若此时计数器数值小于或等于0,则从等待队列中唤醒一个线程并将其移出队列,使其得以执行。

down与up操作亦被称作PV操作(PV原语),其在Java并发包中对应的方法为acquire()与release()。

Semaphore

Semaphore作为JUC框架中提供的信号量实现,其主要功能是限制对特定资源的并发访问线程数量,通过协调多个线程的运行,确保公共资源能够被合理利用。与锁机制(如synchronized和Lock)

全部评论 (0)

还没有任何评论哟~