简介: CSDN博客专家、《Android系统多媒体进阶实战》一书作者
新书发布:《Android系统多媒体进阶实战》🚀
优质专栏: Audio工程师进阶系列【原创干货持续更新中……】🚀
优质专栏: 多媒体系统工程师系列【原创干货持续更新中……】🚀
优质视频课程:AAOS车载系统+AOSP14系统攻城狮入门视频实战课 🚀
人生格言: 人生从来没有捷径,只有行动才是治疗恐惧和懒惰的唯一良药.
🍉🍉🍉文章目录🍉🍉🍉
🌻1. 前言
本篇目的:Java进阶之synchronized关键字:用法实例
🌻2. Java synchronized关键字介绍
-
基本概念
synchronized
关键字用于控制多个线程对共享资源的访问,确保线程安全。- 可以用于方法或对象,确保同一时间只有一个线程可以执行同步代码块。
-
功能
- 确保多个线程对共享资源的访问是互斥的。
- 提供线程同步机制,防止数据竞争和不一致。
-
使用限制
synchronized
只能用于方法或对象。- 同步方法或代码块必须明确指定同步对象。
-
性能特性
synchronized
会引入锁机制,可能会影响性能。- 合理使用
synchronized
可以提高代码的线程安全性。
-
使用场景
- 广泛应用于需要线程安全的场景,如多线程访问共享资源。
- 特别适用于需要防止数据竞争和不一致的场景。
🌻3. 代码实例
🌻3.1 使用synchronized同步方法
-
应用场景
- 使用
synchronized
同步方法,确保线程安全。
- 使用
-
用法实例
public class SynchronizedMethodExample { private int count = 0; public synchronized void increment() { count++; System.out.println("Count: " + count + " (Thread: " + Thread.currentThread().getName() + ")"); } public static void main(String[] args) { SynchronizedMethodExample example = new SynchronizedMethodExample(); Thread thread1 = new Thread(() -> { for (int i = 0; i < 5; i++) { example.increment(); } }, "Thread-1"); Thread thread2 = new Thread(() -> { for (int i = 0; i < 5; i++) { example.increment(); } }, "Thread-2"); thread1.start(); thread2.start(); } }
输出:
Count: 1 (Thread: Thread-1)
Count: 2 (Thread: Thread-1)
Count: 3 (Thread: Thread-1)
Count: 4 (Thread: Thread-1)
Count: 5 (Thread: Thread-1)
Count: 6 (Thread: Thread-2)
Count: 7 (Thread: Thread-2)
Count: 8 (Thread: Thread-2)
Count: 9 (Thread: Thread-2)
Count: 10 (Thread: Thread-2)
🌻3.2 使用synchronized同步代码块
-
应用场景
- 使用
synchronized
同步代码块,确保线程安全。
- 使用
-
用法实例
public class SynchronizedBlockExample { private int count = 0; private final Object lock = new Object(); public void increment() { synchronized (lock) { count++; System.out.println("Count: " + count + " (Thread: " + Thread.currentThread().getName() + ")"); } } public static void main(String[] args) { SynchronizedBlockExample example = new SynchronizedBlockExample(); Thread thread1 = new Thread(() -> { for (int i = 0; i < 5; i++) { example.increment(); } }, "Thread-1"); Thread thread2 = new Thread(() -> { for (int i = 0; i < 5; i++) { example.increment(); } }, "Thread-2"); thread1.start(); thread2.start(); } }
输出:
Count: 1 (Thread: Thread-1)
Count: 2 (Thread: Thread-1)
Count: 3 (Thread: Thread-1)
Count: 4 (Thread: Thread-1)
Count: 5 (Thread: Thread-1)
Count: 6 (Thread: Thread-2)
Count: 7 (Thread: Thread-2)
Count: 8 (Thread: Thread-2)
Count: 9 (Thread: Thread-2)
Count: 10 (Thread: Thread-2)
🌻3.3 使用synchronized同步静态方法
-
应用场景
- 使用
synchronized
同步静态方法,确保线程安全。
- 使用
-
用法实例
public class SynchronizedStaticMethodExample { private static int count = 0; public static synchronized void increment() { count++; System.out.println("Count: " + count + " (Thread: " + Thread.currentThread().getName() + ")"); } public static void main(String[] args) { Thread thread1 = new Thread(() -> { for (int i = 0; i < 5; i++) { SynchronizedStaticMethodExample.increment(); } }, "Thread-1"); Thread thread2 = new Thread(() -> { for (int i = 0; i < 5; i++) { SynchronizedStaticMethodExample.increment(); } }, "Thread-2"); thread1.start(); thread2.start(); } }
输出:
Count: 1 (Thread: Thread-1)
Count: 2 (Thread: Thread-1)
Count: 3 (Thread: Thread-1)
Count: 4 (Thread: Thread-1)
Count: 5 (Thread: Thread-1)
Count: 6 (Thread: Thread-2)
Count: 7 (Thread: Thread-2)
Count: 8 (Thread: Thread-2)
Count: 9 (Thread: Thread-2)
Count: 10 (Thread: Thread-2)
🌻3.4 synchronized关键字总结
关键词 | 功能描述 | 典型应用 |
---|---|---|
synchronized | 确保线程安全 | 用于方法或对象,确保同一时间只有一个线程可以执行同步代码块 |
同步方法 | 同步整个方法 | 确保方法内的操作是线程安全的 |
同步代码块 | 同步代码块 | 确保代码块内的操作是线程安全的 |
静态同步方法 | 同步静态方法 | 确保静态方法内的操作是线程安全的 |
性能特性 | 引入锁机制 | 可能会影响性能,但确保线程安全 |