Java高并发之魂:synchronized 关键字

本文详细介绍了Java中的synchronized关键字,包括其概念、作用、三种使用方式(实例方法、静态方法、同步代码块)及其内存语义。通过实例分析了synchronized如何保证线程安全,防止并发问题,并探讨了其与线程上下文切换的关系。文章旨在帮助读者掌握synchronized的关键特性,提升并发编程能力。
摘要由CSDN通过智能技术生成

本文首发自「慕课网」(www.imooc.com),想了解更多IT干货内容,程序员圈内热闻,欢迎关注"慕课网"或慕课网公众号!

作者:王军伟Tech | 慕课网讲师


1. 前言

今天我们要用最简洁,清晰的内容对高并发之魂 synchronized 关键字的使用进行讲解,帮助你更快搞定synchronized。本文具体内容包含如下:

  • 了解 synchronized 关键字的概念,从总体层面对 synchronized 关键字进行了解,是我们本节课程的基础知识;
  • 了解 synchronized 关键字的作用,知道 synchronized 关键字使用的意义,使我们学习本节内容的出发点;
  • 掌握 synchronized 关键字的 3 中使用方式,使我们本节课程的核心内容,所有的内容讲解都是围绕这一知识点进行的;
  • 了解 synchronized 关键字的内存语义,将 synchronized 关键字与 Java 的线程内存模型进行关联,更好的了解 synchronized 关键字的作用及意义,为本节重点内容。

2. synchronized 关键字介绍

概念:synchronized 同步块是 Java 提供的一种原子性内置锁,Java 中的每个对象都可以把它当作一个同步锁来使用,这些 Java 内置的使用者看不到的锁被称为内部锁,也叫作监视器锁。

线程的执行:代码在进入 synchronized 代码块前会自动获取内部锁,这时候其他线程访问该同步代码块时会被阻塞挂起。拿到内部锁的线程会在正常退出同步代码块或者抛出异常后或者在同步块内调用了该内置锁资源的 wait 系列方法时释放该内置锁。

内置锁:即排它锁,也就是当一个线程获取这个锁后,其他线程必须等待该线程释放锁后才能获取该锁。

Tips:由于 Java 中的线程是与操作系统的原生线程一一对应的,所以当阻塞一个线程时,需要从用户态切换到内核态执行阻塞操作,这是很耗时的操作,而 synchronized 的使用就会导致上下文切换。
后续章节我们会引入 Lock 接口和 ReadWriteLock 接口,能在一定场景下很好地避免 synchronized 关键字导致的上下文切换问题。

3. synchronized 关键字的作用

作用:在并发编程中存在线程安全问题,使用 synchronized 关键字能够有效的避免多线程环境下的线程安全问题,线程安全问题主要考虑以下三点:

  • 存在共享数据,共享数据是对多线程可见的,所有的线程都有权限对共享数据进行操作;
  • 多线程共同操作共享数据。关键字 sync
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值