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

03-控制对资源的一个或多个副本的并发访问

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

3.2 控制对资源的一个或多个副本的并发访问

本节介绍如何使用Java API提供的信号量机制。一个信号量就是一个计数器,可用于保护对一个或多个共享资源的访问。

  **提示:** 这个概念是Edsger Dijkstra于1965年提出的,并且在THEOS操作系统中首次使用。

当一个线程要访问多个共享资源中的一个时,它首先需要获得一个信号量。如果信号量内部的计数器的值大于0,那么信号量就递减计数器并允许线程访问。计数器的值大于0意味着存在可用的空闲资源,所以线程能够访问并使用这些资源中的一个。

如果计数器的值为0,信号量会让线程休眠,直到计数器的值大于0。计数器的值为0意味着所有共享资源都被其他线程占用了,所以当前想要使用资源的线程,必须等待其中一个资源被释放。

本节将介绍如何使用 Semaphore 类来保护一个资源的多个副本。本案例将使用一个打印队列在3个打印机上打印文档。