Java多线程同步问题:实例演示

原创 喜欢ヅ旅行 2024-10-10 16:15 143阅读 0赞

在Java中,多线程同步是通过多种机制来保证不同线程对共享资源的正确访问。下面我们将通过一个简单的例子来展示这些同步机制。

  1. 示例代码:
    ```java
    // 创建共享变量
    public class SharedVariable {
    private int count = 0;

    public synchronized int getCount() {

    1. return count++;

    }
    }

// 创建多个线程
class Producer extends Thread {
private SharedVariable shared;

  1. public Producer(SharedVariable shared) {
  2. this.shared = shared;
  3. }
  4. @Override
  5. public void run() {
  6. try {
  7. for (int i = 0; i < 10; i++) {
  8. shared.getCount(); // 省略实际操作
  9. if (i == 5) { // 模拟暂停
  10. Thread.sleep(100);
  11. }
  12. }
  13. } catch (InterruptedException e) {
  14. e.printStackTrace();
  15. }
  16. }

}

class Consumer extends Thread {
private SharedVariable shared;

  1. public Consumer(SharedVariable shared) {
  2. this.shared = shared;
  3. }
  4. @Override
  5. public void run() {
  6. try {
  7. for (int i = 0; i < 10; i++) {
  8. if (shared.getCount() == 5) { // 模拟同步条件
  9. System.out.println("同步:Producer暂停,Consumer获取到最新值 " + shared.getCount());
  10. break;
  11. }
  12. System.out.println("Producer执行:值 " + shared.getCount()); // 执行实际操作
  13. }
  14. } catch (InterruptedException e) {
  15. e.printStackTrace();
  16. }
  17. }

}

public class Main {
public static void main(String[] args) {
SharedVariable shared = new SharedVariable();

  1. Producer producer = new Producer(shared);
  2. Consumer consumer = new Consumer(shared);
  3. producer.start(); // 启动生产者线程
  4. consumer.start(); // 启动消费者线程
  5. try {
  6. producer.join(); // 等待生产者线程结束
  7. consumer.join(); // 等待消费者线程结束
  8. } catch (InterruptedException e) {
  9. e.printStackTrace();
  10. }
  11. }

}
```

  1. 演示结果:
    在这个例子中,我们创建了一个共享变量SharedVariable,以及两个线程:生产者Producer和消费者Consumer
  • 生产者会增加共享变量的计数。
  • 消费者会在同步条件满足时(即计数为5),获取到最新值,并打印出来。

通过这个例子,我们可以看到Java多线程中的synchronized关键字如何实现同步。

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

发表评论

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

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

相关阅读

    相关 Java线编程:同步问题演示

    在Java多线程编程中,同步问题是常见的挑战。这里我们将通过一个简单的例子来演示同步问题。 **示例:共享资源的多个线程** 假设我们有一个共享变量`count`,初始值为

    相关 Java线同步问题演示

    在Java中,多线程同步是一个重要的概念,它确保了多个线程在访问共享资源时的一致性和线程安全。以下是一些常见的多线程同步问题的演示和解决方案。 ###1.共享资源的竞态条件*