21xrx.com
2024-11-23 17:52:33 Saturday
登录
文章检索 我的文章 写文章
Java如何实现多线程同时消费同一变量
2023-07-04 16:23:46 深夜i     --     --
Java 多线程 消费 变量 同时

Java是一种面向对象的编程语言,它在实现多线程方面有着很强的能力。在多线程程序中,我们经常会面临多个线程同时访问和修改一个变量的情况。这时就需要使用同步机制来保证线程安全。

Java提供了synchronized关键字来实现同步。synchronized关键字可以将一段代码块或方法锁定,确保同时只有一个线程访问该代码块或方法。在多线程同时访问同一变量的情况下,可以使用synchronized关键字来保证线程安全。

下面是一个使用synchronized关键字实现多线程同时消费同一变量的示例:


public class Worker implements Runnable {

  private int count;

  private Object lock;

  public Worker(Object lock)

    this.lock = lock;

  

  public void run() {

    synchronized (lock) {

      for (int i = 0; i < 10; i++) {

        while (count % 2 == 0) {

          try {

            lock.wait();

          } catch (InterruptedException e) {

            e.printStackTrace();

          }

        }

        System.out.println(Thread.currentThread().getName() + " " + count);

        count++;

        lock.notifyAll();

      }

    }

  }

}

public class Main {

  public static void main(String[] args) {

    Object lock = new Object();

    Thread t1 = new Thread(new Worker(lock), "Thread 1");

    Thread t2 = new Thread(new Worker(lock), "Thread 2");

    t1.start();

    t2.start();

  }

}

在上面的示例中,我们使用了一个Object类型的lock对象来实现同步。两个线程都访问了Worker对象的run方法,并使用了synchronized关键字锁定了一个代码块。在这个代码块中,我们使用了一个while循环来判断是否可以消费变量count。如果count是偶数,线程就会进入等待状态,直到有其他线程修改了count的值。当变量count为奇数时,线程就会打印出count的值,并将count的值加一,然后使用notifyAll()方法唤醒其他线程。

通过使用synchronized关键字和wait/notify机制,我们可以实现多线程同时消费同一变量的功能。这样的实现可以有效避免竞争条件,并提高多线程程序的安全性。

  
  

评论区

{{item['qq_nickname']}}
()
回复
回复