21xrx.com
2024-11-22 09:55:08 Friday
登录
文章检索 我的文章 写文章
Java Synchronized: 实现并发控制的实用技巧
2023-06-16 11:07:56 深夜i     --     --
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关键字的使用。它可以很方便地解决并发控制问题,但需要注意的是,使用不当会导致死锁等问题。

  
  

评论区

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