Java多线程同步教程 – synchronized关键字详解

2024-12-07 0 875

Java多线程同步教程synchronized关键字详解

学习如何在Java中实现多线程同步,提升程序的线程安全。

前言

在多线程编程中,线程同步是一个非常重要的概念。通过同步,可以确保多个线程在访问共享资源时不会发生竞态条件(Race Condition),从而保证程序的正确性和可靠性。Java 提供了多种同步机制,其中 `synchronized` 关键字是最常用的一种。

synchronized关键字概述

`synchronized` 关键字可以用于方法或代码块,用来标记需要同步的代码区域。当一个线程进入同步区域时,它将获得一个称为“内在锁”或“监视器锁”的对象锁。

  • 当 `synchronized` 修饰方法时,锁的是当前实例对象。
  • 当 `synchronized` 修饰静态方法时,锁的是当前类的 Class 对象。
  • 当 `synchronized` 修饰代码块时,可以指定锁的对象。

案例讲解:使用synchronized实现线程安全的计数器

以下是一个使用 `synchronized` 关键字实现线程安全计数器的示例。

示例代码


public class SynchronizedCounter {
    private int count = 0;

    // 使用synchronized修饰实例方法
    public synchronized void increment() {
        count++;
    }

    // 使用synchronized修饰代码块
    public void incrementWithLock(Object lock) {
        synchronized (lock) {
            count++;
        }
    }

    public int getCount() {
        return count;
    }

    public static void main(String[] args) throws InterruptedException {
        SynchronizedCounter counter = new SynchronizedCounter();
        Object lock = new Object();

        // 创建多个线程来测试计数器是否线程安全
        Thread[] threads = new Thread[1000];
        for (int i = 0; i  {
                for (int j = 0; j < 1000; j++) {
                    // counter.increment(); // 可以使用这种方式
                    counter.incrementWithLock(lock); // 或者使用这种方式
                }
            });
            threads[i].start();
        }

        // 等待所有线程完成
        for (Thread thread : threads) {
            thread.join();
        }

        // 打印最终计数器值
        System.out.println("Final count: " + counter.getCount());
    }
}
    

代码解析

1. `SynchronizedCounter` 类中有一个 `count` 变量以及两个 `increment` 方法,一个使用 `synchronized` 修饰实例方法,另一个使用 `synchronized` 修饰代码块并接受一个锁对象。

2. 在 `main` 方法中,我们创建了 1000 个线程,每个线程对计数器执行 1000 次递增操作。通过调用 `increment` 方法或 `incrementWithLock(lock)` 方法,可以确保计数器的递增操作是线程安全的。

3. 最后,通过 `thread.join()` 方法等待所有线程完成,并打印出计数器的最终值。

总结

`synchronized` 关键字是Java中实现线程同步的重要工具之一。通过合理地使用 `synchronized`,可以确保多个线程在访问共享资源时不会发生竞态条件,从而提升程序的稳定性和可靠性。

希望本教程能对你有所帮助,祝你编程愉快!

Java多线程同步教程
收藏 (0) 打赏

感谢您的支持,我会继续努力的!

打开微信/支付宝扫一扫,即可进行扫码打赏哦,分享从这里开始,精彩与您同在
点赞 (0)

本站尊重知识产权,如知识产权权利人认为平台内容涉嫌侵犯到您的权益,可通过邮件:8990553@qq.com,我们将及时删除文章
本站所有资源仅用于学习及研究使用,请必须在24小时内删除所下载资源,切勿用于商业用途,否则由此引发的法律纠纷及连带责任本站和发布者概不承担。资源除标明原创外均来自网络整理,版权归原作者或本站特约原创作者所有,如侵犯到您权益请联系本站删除

腾谷资源站 java Java多线程同步教程 – synchronized关键字详解 https://www.tenguzhan.com/2752.html

常见问题

相关文章

发表评论
暂无评论
官方客服团队

为您解决烦忧 - 24小时在线 专业服务