根据修饰对象分类

  1. 同步方法

    1. 同步非静态方法
Public synchronized void methodName(){……}
  1. 同步静态方法
Public synchronized static void methodName(){……}
  1. 同步代码块

synchronized(this|object) {}

synchronized(类.class) {}

Private final Object MUTEX =new Object();Public void methodName(){Synchronized(MUTEX ){……}}

根据获取的锁分类

  1. 获取对象锁

synchronized(this|object) {}

修饰非静态方法

在 Java 中,每个对象都会有一个 monitor 对象,这个对象其实就是 Java 对象的锁,通常会被称为“内置锁”或“对象锁”。类的对象可以有多个,所以每个对象有其独立的对象锁,互不干扰。

  1. 获取类锁

synchronized(类.class) {}

修饰静态方法

在 Java 中,针对每个类也有一个锁,可以称为“类锁”,类锁实际上是通过对象锁实现的,即类的 Class 对象锁。每个类只有一个 Class 对象,所以每个类只有一个类锁。

在 Java 中,每个对象都会有一个 monitor 对象,监视器。

  1. 某一线程占有这个对象的时候,先monitor 的计数器是不是0,如果是0还没有线程占有,这个时候线程占有这个对象,并且对这个对象的monitor+1;如果不为0,表示这个线程已经被其他线程占有,这个线程等待。当线程释放占有权的时候,monitor-1;
  2. 同一线程可以对同一对象进行多次加锁,+1,+1,重入性

synchronized的用法相关推荐

  1. java synchronized 使用_Java中Synchronized的用法

    synchronized是Java中的关键字,是一种同步锁.它修饰的对象有以下几种: 1. 修饰一个代码块,被修饰的代码块称为同步语句块,其作用的范围是大括号{}括起来的代码,作用的对象是调用这个代码 ...

  2. Java中Synchronized的用法

    原文:http://blog.csdn.net/luoweifu/article/details/46613015 <编程思想之多线程与多进程(1)--以操作系统的角度述说线程与进程>一文 ...

  3. Java 多线程:synchronized 关键字用法(修饰类,方法,静态方法,代码块)

    前言 在 多线程生成的原因(Java内存模型与i++操作解析) 中,介绍了Java的内存模型,从而可能导致的多线程问题.synchronized就是避免这个问题的解决方法之一.除了 synchroni ...

  4. Java线程中关于Synchronized的用法

    synchronized是Java中的关键字,是一种同步锁.它修饰的对象有以下几种:  1. 修饰一个代码块,被修饰的代码块称为同步语句块,其作用的范围是大括号{}括起来的代码,作用的对象是调用这个代 ...

  5. 从不同步的代码块中调用了对象同步方法。_Java中Synchronized的用法

    Java中,synchronized关键字是用来控制线程同步的,就是在多线程的环境下,控制synchronized代码段不被多个线程同时执行.拉勾IT课小编为大家分析. synchronized是Ja ...

  6. synchronized解释用法及原理

    转自:HollisChuang's Blog synchronized synchronized的用法 synchronized的实现原理 synchronized与原子性 synchronized与 ...

  7. iOS 线程安全之@synchronized的用法

    @synchronized(self)的用法: @synchronized 的作用是创建一个互斥锁,保证此时没有其它线程对self对象进行修改.这个是objective-c的一个锁定令牌,防止self ...

  8. Java中Synchronized的用法(简单介绍)

    简单介绍 synchronized是Java中的关键字,是一种同步锁.它修饰的对象有以下几种: 1. 修饰一个代码块,被修饰的代码块称为同步语句块,其作用的范围是大括号{}括起来的代码,作用的对象是调 ...

  9. java中synchronized的用法详解

    记下来,很重要. Java语言的关键字,当它用来修饰一个方法或者一个代码块的时候,能够保证在同一时刻最多只有一个线程执行该段代码. 一.当两个并发线程访问同一个对象object中的这个synchron ...

  10. synchronized(this)用法

    关于 Java synchronized(this) 的问题   用法: public class Thread1 implements Runnable {public void run() { & ...

最新文章

  1. 系列文章--jQuery教程
  2. python培训出来的有公司要吗-目前从事Python培训的机构有很多家
  3. 使用RunTime添加动态方法、方法交换、获取所有属性来重写归档解档
  4. Android中的Dialog
  5. 小白入门深度学习 | 第四篇:配置PyTorch环境
  6. pfx证书密码怎么查询_2019成考成绩查询时间通知!忘记账号和密码怎么办?
  7. vagrant boxes
  8. Java方法中的参数太多,第2部分:参数对象
  9. Linux系统:centos7下搭建ElasticSearch中间件,常用接口演示
  10. 近年NOIP普及组复赛题目的简单讲解
  11. node命令错误--nodemon : 无法将“nodemon”项识别
  12. linux bug定位神器——lsof | grep 简直不能太好用
  13. JavaEE学习13--Jquery
  14. Linux acpi off报告ACPI bug处理方法
  15. [ATL/WTL]_[Gdiplus]_[关于使用Gdiplus来绘制反锯齿的圆角矩形]
  16. 如何透过表象直达本质
  17. php 图片上加文字,PHP实现在图片中添加中文文字
  18. 【鑫鑫批量挂Q器 v2.0绿色版】
  19. 寻找丢失的iexplore进程
  20. 下载到的电子书格式是Mobi,这种格式能否在手机上打开?

热门文章

  1. sql语句中时间格式转化举例
  2. Codeforces 429B Working out:dp【枚举交点】
  3. 转发- css(display,float,position)
  4. Oracle SQL语句大全(二)
  5. R运行大数据的过程中遇到的问题:不能有负长度矢量
  6. Android 点击图片进行浏览
  7. 初识ajaxpro以及使用
  8. Form表单标签的Enctype属性的编码格类型
  9. 黑魔方之《计算机学习金手册》(无格式纯文本版)
  10. 采用预取(Prefetch)来加速你的网站(转)