synchronized的理解

用法解释

synchronized是Java中的关键字,是一种同步锁。它修饰的对象有以下几种: 
1. 修饰一个代码块,被修饰的代码块称为同步语句块,其作用的范围是大括号{}括起来的代码,作用的对象是调用这个代码块的对象; 
2. 修饰一个方法,被修饰的方法称为同步方法,其作用的范围是整个方法,作用的对象是调用这个方法的对象; 
3. 修饰一个静态的方法,其作用的范围是整个静态方法,作用的对象是这个类的所有对象; 
4. 修饰一个类(Person.class),其作用的范围是synchronized后面括号括起来的部分,作用的对象是这个类的所有对象。

原因解释

java的对象锁和类锁:java的对象锁和类锁在锁的概念上基本上和内置锁是一致的,但是,两个锁实际是有很大的区别的,对象锁是用于对象实例方法,或者一个对象实例上的,类锁是用于类的静态方法或者一个类的class对象上的。我们知道,类的对象实例可以有很多个,但是每个类只有一个class对象,所以不同对象实例的对象锁是互不干扰的,但是每个类只有一个类锁。

对象的内置锁和对象的状态之间是没有内在的关联的,虽然大多数类都将内置锁用做一种有效的加锁机制,但对象的域并不一定通过内置锁来保护。当获取到与对象关联的内置锁时,并不能阻止其他线程访问该对象,当某个线程获得对象的锁之后,只能阻止其他线程获得同一个锁。之所以每个对象都有一个内置锁,是为了免去显式地创建锁对象。所以synchronized只是一个内置锁的加锁机制,当某个方法加上synchronized关键字后,就表明要获得该内置锁才能执行,并不能阻止其他线程访问不需要获得该内置锁的方法。

时间: 2024-11-10 01:18:54

synchronized的理解的相关文章

Java中synchronized关键字理解

好记性不如烂笔头~~ 并发编程中synchronized关键字的地位很重要,很多人都称它为重量级锁.利用synchronized实现同步的基础:Java中每一个对象都可以作为锁.具体表现为以下三种形式. (1)对于普通同步方法,锁是当前实例对象. (2)对于静态同步方法,锁是当前类的Class对象. (3)对于同步方法块,锁是synchronized括号里配置的对象. 一.普通同步方法 使用synchronized关键字修饰一个普通方法,锁住的是当前实例的对象.当synchronized锁住该对

synchronized(this) 与 synchronized(class) 理解

1.概念 synchronized 是 Java 中的关键字,是利用锁的机制来实现同步的. 锁机制有如下两种特性: 互斥性:即在同一时间只允许一个线程持有某个对象锁,通过这种特性来实现多线程中的协调机制,这样在同一时间只有一个线程对需同步的代码块(复合操作)进行访问.互斥性我们也往往称为操作的原子性. 可见性:必须确保在锁被释放之前,对共享变量所做的修改,对于随后获得该锁的另一个线程是可见的(即在获得锁时应获得最新共享变量的值),否则另一个线程可能是在本地缓存的某个副本上继续操作从而引起不一致.

初识synchronized

什么是synchronized? synchronized关键字,代表这个方法加锁,相当于不管哪一个线程(例如线程A),运行到这个方法时,都要检查有没有其它线程B(或者C.D等)正在用这个方法,若有则要等正在使用synchronized方法的线程B(或者C.D)运行完这个方法后再运行此线程A,若没有则直接运行. synchronized关键字理解 java中synchronized用法 使用了synchronized关键字可以轻松地解决多线程共享数据同步问题. synchronized关键字可以

并发编程之一

并发的来源 并发的由来,从现在来看,似乎是必然的.因为人是一种懒惰而又急躁的动物,这是人的本性.因为急躁,并发就出现了,因为懒惰,多核时代就来了. 为什么这么说呢? 如果所有的程序都是串行的(之所以说如果,是因为LZ接触到电脑时,它已经是并发的了,因此只能想象一下),那么当你打开了一个特别慢的网页,最后你等不及想关掉浏览器的时候,你会发现,你必须等加载这个网页的事做完你才能关闭它.这是何其蛋疼的一件事.急躁的人们能允许这种事发生?因此并发就出现了. 再来想象一下,如果我们想让一个程序运行的更快,

多线程之----线程互斥再续

本篇接上一篇 多线程之----线程互斥 不好意思 在上一篇中本来是要说线程互斥的,结果对比了下quartor和Timer,讲的quartor有点多了.这节我们重点说一下线程互斥. 按照如下的方式来学习线程互斥: 实现线程互斥的两种方法,sychronized wait/notify  lock(read/write).三种方式. 先开始第一种使用sychronized关键字.大家对这个应该不会陌生,因为我们写过很多线程安全或者说是线程互斥的例子,使用sychronized关键字应该是最主要的方式

Java 并发学习总结

目录 基础篇 进阶篇 并发编程的的三个概念(特性)? JMM(Java 内存模型) volatile 关键字 1. Java 内存模型(为什么要有 volatile) 2. volatile 原理 追加字节性能优化 synchronized 关键字 说一下对 Synchronized 的理解 synchronized 的三种应用 双重检验锁方式实现单例模式 synchronized 底层原理 synchronized 如何实现内存可见性 Java 对象头 JDK1.6 之后 synchroniz

Java 并发核心机制

目录   一.J.U.C 简介  二.synchronized  三.volatile  四.CAS  五.ThreadLocal  参考资料 ?? 本文以及示例源码已归档在 javacore 一.J.U.C 简介 Java 的 java.util.concurrent 包(简称 J.U.C)中提供了大量并发工具类,是 Java 并发能力的主要体现(注意,不是全部,有部分并发能力的支持在其他包中).从功能上,大致可以分为: 原子类 - 如:AtomicInteger.AtomicIntegerA

并发编程相关面试题四

一.Java开发中用过哪些锁 1.乐观锁 乐观锁顾名思义,就是很乐观,每次去拿数据的时候都认为别人不会修改,所以不会上锁,但是在更新的时候会判断一下在此期间别人有没有去更新这个数据,可以使用版本号等机制.乐观锁适用于多读的应用类型,这样可以提高吞吐量,在Java中java.util.concurrent.atomic包下面的原子变量类就是使用了乐观锁的一种实现方式CAS(Compare and Swap 比较并交换)实现的 乐观锁适合读操作非常多的场景,不加锁会带来大量的性能提升: 乐观锁在Ja

并发编程常见面试题

1.进程和线程还有协程之间的关系   1.1 进程,直观点说,保存在硬盘上的程序运行以后,会在内存空间里形成一个独立的内存体,这个内存体有自己独立的地址空间,有自己的堆,上级挂靠单位是操作系统. 操作系统会以进程为单位,分配系统资源(CPU时间片.内存等资源),进程是资源分配的最小单位. 1.2 线程,有时被称为轻量级进程(Lightweight Process,LWP),是操作系统调度(CPU调度)执行的最小单位. 1.3 协程,协程是一种用户态的轻量级线程,协程的调度完全由用户控制.协程拥有