使用信号量进行多线程处理

时间:2011-11-22 00:41:55

标签: java multithreading semaphore

我需要澄清与多线程相关的问题。我有获取信号量的线程,并在一段时间后释放它。一旦完成释放第一个信号量,它就会获得第二个信号量,然后释放它。两个信号量都保护线程的run()方法中的不同代码。如下所示:

public void run() {
     System.out.println("Step 1");
     semaphoreA.acquire();

     // Run for a while

     semaphoreA.release();

     // Run for a while

     semaphoreB.acquire();
     System.out.println("Step 2");

     // Run for a while

     semaphoreB.release();
}

因此,当没有semaphoreB的许可时,线程会等待。但是,当许可证可用时,我不应该在控制台上看到“第2步”吗?或者说线程和信号量是如何工作的?

我想了解如果线程刚刚收到有关可用信号量许可的通知会发生什么。该线程会从一开始就开始吗?或者从它离开的地方?

1 个答案:

答案 0 :(得分:0)

假设您使用新信号量(1,true)实例化semaphoreA和SemaphoreB,您将看到:

第1步

第2步

如果某个其他线程获取了信号量,则在它被释放之前,该线程只是等待它所在的位置。换句话说,你永远不会一步,但永远不会两次。根据是否释放了任何信号量,您可能会看到第2步。

相关问题