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

原创 £神魔★判官ぃ 2024-12-11 18:15 155阅读 0赞

在Java中,信号量(Semaphore)是一种多线程同步工具。它能控制同时访问共享资源的线程数量。

下面是一个简单的信号量示例:

  1. import java.util.concurrent.Semaphore;
  2. public class SemaphoreExample {
  3. private Semaphore semaphore = new Semaphore(1); // 初始化为允许1个线程
  4. public void threadOne() throws InterruptedException {
  5. System.out.println("Thread 1: Trying to acquire lock...");
  6. semaphore.acquire(); // 获取锁
  7. System.out.println("Thread 1: Lock acquired, executing task...");
  8. doSomething();
  9. System.out.println("Thread 1: Lock released back to semaphore.");
  10. semaphore.release(); // 释放锁
  11. }
  12. public void threadTwo() throws InterruptedException {
  13. System.out.println("Thread 2: Trying to acquire lock...");
  14. semaphore.acquire(); // 获取锁
  15. System.out.println("Thread 2: Lock acquired, executing task...");
  16. doSomethingElse();
  17. System.out.println("Thread 2: Lock released back to semaphore.");
  18. semaphore.release(); // 释放锁
  19. }
  20. public void startThreads() throws InterruptedException {
  21. new Thread(threadOne)).start(); // 启动线程1
  22. new Thread(threadTwo)).start(); // 启动线程2
  23. }
  24. private void doSomething() { // 你的任务,这里只是一个示例
  25. try {
  26. Thread.sleep(500); // 模拟一些耗时操作
  27. } catch (InterruptedException e) {
  28. e.printStackTrace();
  29. }
  30. System.out.println("Thread 1: Operation completed.");
  31. }
  32. private void doSomethingElse() { // 另一个任务,这里只是一个示例
  33. try {
  34. Thread.sleep(300); // 模拟一些耗时操作
  35. } catch (InterruptedException e) {
  36. e.printStackTrace();
  37. }
  38. System.out.println("Thread 2: Operation completed.");
  39. }
  40. public static void main(String[] args) throws InterruptedException {
  41. SemaphoreExample example = new SemaphoreExample();
  42. example.startThreads(); // 启动线程
  43. }
  44. }

在这个例子中,我们创建了两个线程(threadOne和threadTwo),它们通过信号量semaphore来控制对共享资源的访问。Semaphore(1)表示允许一个线程执行任务。

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

发表评论

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

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

相关阅读