在Java中,多线程编程是一项常见的任务。当多个线程同时访问共享资源时,可能会导致竞态条件和数据不一致的问题。为了解决这些问题,Java提供了synchronized关键字,它可以用于保护共享资源的访问,确保在任意时刻只有一个线程可以执行被synchronized修饰的代码块或方法。
synchronized关键字有两种用法:synchronized代码块和synchronized方法。
-
synchronized代码块:
synchronized代码块可以用来同步对共享资源的访问。它的语法如下:synchronized (锁对象) { // 需要同步的代码块 } ``` 锁对象可以是任意Java对象,但是在多个线程之间共享的资源应该使用同一个锁对象。当一个线程进入synchronized代码块时,它会尝试获取锁对象的锁;如果锁对象的锁已经被其他线程持有,则该线程将被阻塞,直到获取到锁为止。 下面是一个使用synchronized代码块的示例: ````java class Counter { private int count = 0; private Object lock = new Object(); // 锁对象 public void increment() { synchronized (lock) { // 以lock对象作为锁