21xrx.com
2025-07-15 04:23:53 Tuesday
登录
文章检索 我的文章 写文章
Java Synchronized: 实现并发控制的实用技巧
2023-06-16 11:07:56 深夜i     20     0
Java synchronized 并发控制

Java Synchronized: 实现并发控制的实用技巧

在Java编程中,实现并发控制是必不可少的。当多个线程同时访问一个共享资源时,很容易导致数据不一致的问题。Java提供了一种同步机制来解决这个问题,即synchronized关键字。

synchronized关键字可以用在方法上或代码块中,用来保证同步访问某个共享资源。关键字后面跟随的是锁对象,当多个线程需要访问该资源时,只有拥有锁对象的线程才能进行访问。其他线程必须等待锁释放后才能访问。

下面是一个使用synchronized关键字实现同步的案例:

class Counter {
  private int value = 0;
  public synchronized void increment() {
    value++;
  }
  public synchronized void decrement()
    value--;
  
  public synchronized int getValue()
    return value;
  
}
public class Main {
  public static void main(String[] args) {
    Counter counter = new Counter();
    Runnable r = () -> {
      for (int i = 0; i < 100; i++) {
        counter.increment();
        counter.decrement();
      }
    };
    Thread t1 = new Thread(r);
    Thread t2 = new Thread(r);
    t1.start();
    t2.start();
    try {
      t1.join();
      t2.join();
    } catch (InterruptedException e) {
      e.printStackTrace();
    }
    System.out.println("Final value: " + counter.getValue());
  }
}

在上面的例子中,创建了一个Counter类来表示计数器,实现了increment()、decrement()和getValue()三个方法。这三个方法都使用了synchronized关键字来实现同步访问,保证了线程安全性。

在主函数中,创建了两个线程同时对计数器进行操作,使用join()方法保证了线程执行的先后顺序。最后输出计数器的最终值,可以看到结果一定是0。

通过这个例子,我们可以看到synchronized关键字的使用。它可以很方便地解决并发控制问题,但需要注意的是,使用不当会导致死锁等问题。

  
  

评论区