Java多线程通信:信号量问题示例

原创 太过爱你忘了你带给我的痛 2024-12-05 01:00 140阅读 0赞

在Java多线程编程中,信号量(Semaphore)是一种特殊的共享变量,用于控制同时访问某个资源的线程数量。

以下是一个简单的信号量问题示例:

  1. import java.util.concurrent.Semaphore;
  2. public class SemaphoreExample {
  3. private final Semaphore mutex = new Semaphore(1); // 初始化信号量为1
  4. public void threadFunction() throws InterruptedException {
  5. mutex.acquire(); // 请求获取锁,如果已满,则会阻塞
  6. // 这里是需要多线程协作的代码
  7. System.out.println("Thread is working...");
  8. mutex.release(); // 释放锁,其他等待的线程可以获取
  9. }
  10. public static void main(String[] args) {
  11. SemaphoreExample example = new SemaphoreExample();
  12. Thread thread1 = new Thread(example::threadFunction, "Thread-1"));
  13. Thread thread2 = new Thread(example::threadFunction, "Thread-2"));
  14. thread1.start();
  15. thread2.start();
  16. }
  17. }

在这个示例中,我们创建了一个信号量mutex,初始值为1。两个线程thread1thread2分别调用threadFunction

当一个线程请求锁时(即调用mutex.acquire()),如果锁已满(即信号量值为0),那么当前线程会阻塞等待。

当线程释放锁后,其他等待的线程可以获取锁并继续执行。

文章版权声明:注明蒲公英云原创文章,转载或复制请以超链接形式并注明出处。

发表评论

表情:
评论列表 (有 0 条评论,140人围观)

还没有评论,来说两句吧...

相关阅读