2016 - 2024

感恩一路有你

java中synchronized什么意思 Java中synchronized关键字的用法

浏览量:3633 时间:2023-09-30 18:33:41 作者:采采

---

在Java中,synchronized关键字被广泛应用于多线程编程,用于实现对共享资源的访问控制,确保线程安全性。synchronized关键字可以应用于方法、代码块以及静态方法等不同场景。

一、synchronized修饰方法

1.1 同步方法的定义

在方法声明时,使用synchronized关键字修饰,如下所示:

```java

public synchronized void method() {

// 方法体

}

```

1.2 同步方法的作用

使用synchronized修饰的方法,只能由一个线程访问,其他线程将在方法调用处等待,直到获取到锁才能执行。

1.3 示例

```java

public class SynchronizedExample {

private int count 0;

public synchronized void increment() {

count ;

}

public int getCount() {

return count;

}

public static void main(String[] args) throws InterruptedException {

SynchronizedExample example new SynchronizedExample();

Thread t1 new Thread(() -> {

for (int i 0; i < 1000; i ) {

();

}

});

Thread t2 new Thread(() -> {

for (int i 0; i < 1000; i ) {

();

}

});

();

();

();

();

("Count: " ());

}

}

```

以上示例中,我们创建了一个SynchronizedExample类,其中有一个共享变量count。通过使用synchronized修饰的increment方法,确保了对count的操作是线程安全的。在main方法中,我们创建了两个线程t1和t2分别对count进行累加操作,最终输出count的值。

二、synchronized修饰代码块

2.1 同步代码块的定义

使用synchronized关键字修饰一段代码块,如下所示:

```java

synchronized (对象) {

// 代码块

}

```

2.2 同步代码块的作用

同步代码块只会被一个线程访问,其他线程将在代码块处等待,直到获取到锁才能执行。

2.3 示例

```java

public class SynchronizedExample {

private int count 0;

private Object lock new Object();

public void increment() {

synchronized (lock) {

count ;

}

}

public int getCount() {

return count;

}

public static void main(String[] args) throws InterruptedException {

SynchronizedExample example new SynchronizedExample();

Thread t1 new Thread(() -> {

for (int i 0; i < 1000; i ) {

();

}

});

Thread t2 new Thread(() -> {

for (int i 0; i < 1000; i ) {

();

}

});

();

();

();

();

("Count: " ());

}

}

```

以上示例中,我们引入一个Object类型的lock对象作为锁,在increment方法内部使用synchronized(lock)来同步代码块。这样,只有获取到lock对象的线程才能执行代码块,确保了对count的操作是线程安全的。

三、synchronized修饰静态方法

3.1 同步静态方法的定义

在静态方法声明时,使用synchronized关键字修饰,如下所示:

```java

public static synchronized void method() {

// 方法体

}

```

3.2 同步静态方法的作用

使用synchronized修饰的静态方法,只能由一个线程访问,其他线程将在方法调用处等待,直到获取到锁才能执行。

3.3 示例

```java

public class SynchronizedExample {

private static int count 0;

public static synchronized void increment() {

count ;

}

public static int getCount() {

return count;

}

public static void main(String[] args) throws InterruptedException {

Thread t1 new Thread(() -> {

for (int i 0; i < 1000; i ) {

();

}

});

Thread t2 new Thread(() -> {

for (int i 0; i < 1000; i ) {

();

}

});

();

();

();

();

("Count: " ());

}

}

```

以上示例中,我们将increment方法定义为静态方法,并使用synchronized修饰。通过调用SynchronizedExample类的静态方法来对count进行累加操作,确保了对count的操作是线程安全的。

结论:

本文详细解析了Java中synchronized关键字的含义和用法,并通过实例演示了其正确的使用方法。通过使用synchronized关键字,我们可以实现多线程间的同步访问,确保共享资源的安全性。在实际开发中,合理使用synchronized关键字能够有效避免多线程并发带来的问题,提高程序的稳定性和可靠性。

Java synchronized 关键字 详细解析 使用示例

版权声明:本文内容由互联网用户自发贡献,本站不承担相关法律责任.如有侵权/违法内容,本站将立刻删除。