sychronized关键字:

1. 作用:利用该关键字来创建内置锁,实现线程同步;

2. 分类:(1)sychronized同步方法;(2)sychronized同步代码块;

3. sychronized同步方法:

(1)对其他sychronized同步方法或sychronized(this)同步代码块调用呈阻塞状态;

(2)同一时间内只有一个线程可以执行sychronized同步方法中的代码;

4. sychronized(this)同步代码块:

(1)对其他sychronized同步方法或sychronized(this)同步代码块的调用呈阻塞状态;

(2)同一时间内只有一个线程可以执行sychronized同步代码块中的代码;、

5. sychronized(非this对象x)同步代码块:

(1)当多个线程同时持有“对象监视器”为同一对象时,同一时间仅有一个线程执行sychronized(非this对象x)同步代码块中的代码;

(2)优点:不与同步方法以及其他锁this同步方法抢this锁,与同步方法之间的关系是异步的;

6. 静态同步sychronized方法与sychronized(class)代码块,两者作用一样

(1)静态同步sychronized方法:是指将关键字synchronized应用到static静态方法上,这样就是对整个Class类进行持锁

7. Class锁与对象锁不是同一把锁,所以可能出现异步,Class锁可以对类的所有对象实例起作用

sychronized关键字(多线程)的更多相关文章

  1. JAVA面试题 请谈谈你对Sychronized关键字的理解?

    面试官:sychronized关键字有哪些特性? 应聘者: 可以用来修饰方法; 可以用来修饰代码块; 可以用来修饰静态方法; 可以保证线程安全; 支持锁的重入; sychronized使用不当导致死锁 ...

  2. lock与sychronized关键字

    1. lock与sychronized关键字的区别 (1) Lock是一个接口,而synchronized是Java中的关键字,synchronized是内置的语言实现,Lock是代码层面的实现.(2 ...

  3. java多线程系列1:Sychronized关键字

    1.Synchronized使用范围: 同步普通方法:锁的是当前对象 //包含synchronized修饰的同步方法的类addCountClass public class addCountClass ...

  4. [java基础]一文理解java多线程必备的sychronized关键字,从此不再混淆!

    java并发编程中最长用到的关键字就是synchronized了,这里讲解一下这个关键字的用法和容易混淆的地方. synchronized关键字涉及到锁的概念, 在java中,synchronized ...

  5. java内存模型(线程,volatile关键字和sychronized关键字)

    volatile关键字 用在多线程,同步变量. 线程为了提高效率,将某成员变量(如A)拷贝了一份(如B),线程中对A的访问其实访问的是B.只在某些动作时才进行A和B的同步.因此存在A和B不一致的情况. ...

  6. Java多线程初学者指南(10):使用Synchronized关键字同步类方法

    要想解决“脏数据”的问题,最简单的方法就是使用synchronized关键字来使run方法同步,代码如下: public synchronized void run() { ... } 从上面的代码可 ...

  7. Java多线程:线程同步与关键字synchronized

    一.同步的特性1. 不必同步类中所有的方法, 类可以同时拥有同步和非同步方法.2. 如果线程拥有同步和非同步方法, 则非同步方法可以被多个线程自由访问而不受锁的限制. 参见实验1:http://blo ...

  8. Java从零开始学四十四(多线程)

    一.进程与线程 1.1.进程 进程是应用程序的执行实例. 进程是程序的一次动态执行过程,它经历了从代码加载.执行到执行完毕的一个完整过程,这个过程也是进程本身从产生.发展到最终消亡的过程 特征: 动态 ...

  9. Java中Volatile关键字详解

    一.基本概念 先补充一下概念:Java并发中的可见性与原子性 可见性: 可见性是一种复杂的属性,因为可见性中的错误总是会违背我们的直觉.通常,我们无法确保执行读操作的线程能适时地看到其他线程写入的值, ...

随机推荐

  1. vue面试题总汇

    active-class是哪个组件的属性? vue-router模块的router-link组件. 嵌套路由怎么定义? 在实际项目中我们会碰到多层嵌套的组件组合而成,但是我们如何实现嵌套路由呢?因此我 ...

  2. AutoResetEvent和ManualResetEvent理解

    AutoResetEvent和ManualResetEvent用于多线程之间代码执行顺序的控制,它们继承自WaitHandle,API相同,但在使用中还是有区别的. 每次使用时虽然理解了,但由于没有去 ...

  3. MySQL---4、语句规范

    1.命名规范 (1)库名.表名.(按现在的规范类似; PromoHayaoRecord),数据库名使用小写,字段名必须使用小写字母,并采用下划线分割.关键字与函数名称全部大写.(2)库名.表名.字段名 ...

  4. 纯代码Autolayout的三种方法

    Autolayout讲解较多的就是xib和storyboard用法,本文主要记录纯代码的Autolayout使用方法: 方法1.苹果原生的方法,这种方法虽然简单但是太过繁杂,可用性很差 //宽度=su ...

  5. vim 配置文件.vimrc,高亮+自动缩进+行号+折叠+优化

    将一下代码copy到 用户目录下 新建文件为  .vimrc保存即可生效: 如果想所有用户生效 请修改 /etc/vimrc (建议先cp一份)"====================== ...

  6. IDEA 如何加上 tomcat

    前言: idea 上已经有一个 tomcat 了,因为这个 tomcat 为 32 的,需要加一个 64 为的 tomcat . 第一步: 第二步: 第三步: 点击 OK 就好. 结果:

  7. 文件下载(Servlet/Struts2)

    文件上传(Servlet/Struts2/SpringMVC)的链接:http://www.cnblogs.com/ghq120/p/8312944.html 文件下载 Servlet实现 目录结构 ...

  8. LeetCode SQL: Second Highest Salary

    , NULL, salary) as `salary` from ( ,) tmp Write a SQL query to get the second highest salary from th ...

  9. SqlServer 2005升级至SqlServer 2008 解析Json 字符集问题

    如果你数据库是通过sqlserver 2008以上版本创建的请绕过: 客户以前用的是sqlserver2005 创建的数据库.后来升级到 sqlserver 2008 . 有个业务用到了json查询 ...

  10. 将本地项目放到GitHub上托管并展示

    忽然知道自己写的项目效果可以放到网上让别人看到之后,就已经迫不及待了.不墨迹,先去了解GitHub得知,它很强(牛逼),我理解的是这是一个托管平台,可以把自己本地的项目通过git放到上面,你需要新建一 ...