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

06-结果分析

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

结果分析

PrintQueue 类的 printJob() 方法是本案例的关键所在。该方法展示了使用信号量实现临界区来保护共享资源所要遵循的3个步骤。

  • 调用 acquire() 方法获得信号量。
  • 操作共享资源。
  • 调用 release() 方法来释放信号量。

案例中的另一个重点是在 PrintQueue 构造器中对 Semaphore 对象的初始化。这里为 Semaphore 构造器传入了参数3,表示要创建保护3个资源的信号量。前3个调用 acquire() 方法的线程能立即访问临界区,而其他线程将被阻塞。直到某个线程执行完毕临界区代码,并调用 release() 方法释放信号量之后,被阻塞的一个线程才能够获得信号量。

案例程序执行的输出结果如下图所示:

25.png 可以看到,在同时启动的线程中,起初只有3个线程执行了打印任务。而后每当一个打印机完成打印任务后,另一个线程才开始执行打印任务。