Java多线程同步问题:条件变量与信号量示例

原创 ゝ一纸荒年。 2024-10-06 10:06 210阅读 0赞

在Java中,多线程的同步主要通过两种机制实现:条件变量和信号量。这里分别提供这两种同步机制的简单示例:

  1. 条件变量示例:
  1. import java.util.concurrent.Condition;
  2. import java.util.concurrent.locks.Lock;
  3. import java.util.concurrent.locks.ReentrantLock;
  4. public class ConditionalVariableExample {
  5. private Lock lock = new ReentrantLock();
  6. private Condition notReady = lock.newCondition();
  7. private Condition ready = lock.newCondition();
  8. // 线程A,准备执行任务
  9. public void threadAPrepare() {
  10. lock.lock();
  11. try {
  12. notReady.signalAll(); // 通知所有等待条件的线程
  13. System.out.println("Thread A is ready to execute");
  14. ready.await(); // 等待自己被通知为"准备好执行任务"
  15. System.out.println("Thread A has been notified and is executing.");
  16. } finally {
  17. lock.unlock();
  18. }
  19. }
  20. public void startThreadA() {
  21. new Thread(() -> threadAPrepare())).start();
  22. }
  23. }
  1. 信号量示例:

在Java中,Semaphore 类提供了信号量机制。以下是一个简单的示例:

  1. import java.util.concurrent.Semaphore;
  2. public class SemaphoreExample {
  3. private Semaphore semaphore = new Semaphore(1); // 初始化为1个资源
  4. public void threadA() throws InterruptedException {
  5. semaphore.acquire(); // 获取资源,如果资源不足会阻塞
  6. System.out.println("Thread A is executing.");
  7. semaphore.release(); // 释放资源,如果当前没有获取的资源会被拒绝
  8. }
  9. public void startThreadA() {
  10. new Thread(() -> threadA())).start();
  11. }
  12. }

以上两个示例分别展示了条件变量和信号量在Java多线程中的同步机制。

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

发表评论

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

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

相关阅读