Java进阶1. Synchronized 关键字 20131025

1.关于synchronized的简介:

Synchronized 关键字代表对这个方法加锁,相当于不管那一个线程,运行到这个方法的时候,都要检查有没有其他的线程在使用这个方法,如果有的话就要的等待正在使用synchronized方法的线程运行完成之后才可以运行此方法;如果没有的话就直接运行。

2.常见的使用方法

Synchronized方法:

使用synchronized关键字声明synchronized方法的形式:

public synchronized void accessVal(int newVal);

synchronized方法控制对于成员变量的访问,每一个实例的话对应一把锁,每一个synchronized方法必须获得调用给方法的类的实例的锁,才可以执行,否则所属的线程阻塞,方法一旦执行的话,机会独占该锁,知道返回的时候才会将该对象的锁释放掉。这一种机制确保了用一个时刻对于每一个实例来说,类中声明为synchronized的成员函数中至多有一个处于可以执行的状态,因为最多一个线程可以获得该对象的锁,从而有效的避免了类成员变量的访问冲突。

在Java中,不仅对象会有一把锁,每一个类也会对应一把锁,专业那个我们可以将类的静态成员函数声明为synchronized以接受其对于类的静态成员变量的访问。

Synchronized块:

通过synchronized关键字声明同步代码块:

synchronized(Obj){};

这是一个代码块其中的代码块必须获得对象的锁,才可以执行,当然也存在obj.wait() + while(condition),来释放对象的锁,等到notify来唤醒。

3对于synchronized(this)的理解

当对于两个并发线程访问同一个对象obj的synchronized(this)代码块的时候,一个时间内只会有一个线程得到执行,其他的线程必须等待;但是另一个线程可以访问代码块中其他的非synchronized(this)代码块;

4.对于synchronized的用法

4.1public synchronized void func(); 声明类的成员函数是synchronized ,实际上是获得的这个对象的锁,所以其他的线程是不可以访问其他的synchronized方法的,因为锁住了当前对象。

4.2synchronized(Object obj){}代码快的话,对于此对象的代码块,只允许一个线程访问,但是针对的是同一个对象;

4.3synchronized(class) 锁住该类,将整个类lock主,访问该类中所有的同步方法,不会对象是不是同一个,都会阻塞。

转载于:https://www.cnblogs.com/hbhzsysutengfei/p/3409554.html

Java进阶1. Synchronized 关键字相关推荐

  1. Java多线程:synchronized关键字和Lock

    一.synchronized synchronized关键字可以用于声明方法,也可以用来声明代码块,下面分别看一下具体的场景(摘抄自<大型网站系统与Java中间件实践>) 案例一:其中fo ...

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

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

  3. Java 并发编程—Synchronized关键字

    原文作者:liuxiaopeng 原文地址:Java并发编程:Synchronized及其实现原理 目录 一.Synchronized的基本使用 二.Synchronized 原理 三.运行结果解释 ...

  4. java synchronized_Java中synchronized关键字理解

    好记性不如烂笔头~~ 并发编程中synchronized关键字的地位很重要,很多人都称它为重量级锁.利用synchronized实现同步的基础:Java中每一个对象都可以作为锁.具体表现为以下三种形式 ...

  5. Java并发之synchronized关键字

    简介 Java中每个对象都可以作为锁,这也是synchronized实现同步的基础.当线程试图访问同步代码时,首先必须要先获得对象锁,且抛出异常或退出时必须释放锁.synchronized实现同步的方 ...

  6. Java进阶:synchronized使用详解

    1. synchronized的作用 锁住代码块,保证同一段代码在某一时刻只能有一个线程执行,该线程执行完毕后,其他线程再执行.目的是防止多线程并发操作导致的异常. 例如:当前有个变量count=0, ...

  7. 【JAVA进阶】static关键字详解

  8. java synchronized关键字_Java synchronized 关键字,你用的对吗?

    for (int i = 0; i < 5; i++) {System.out.println(Thread.currentThread.getName + " " + i) ...

  9. 从分布式锁角度理解Java的synchronized关键字

    分布式锁 分布式锁就以zookeeper为例,zookeeper是一个分布式系统的协调器,我们将其理解为一个文件系统,可以在zookeeper服务器中创建或删除文件夹或文件.设D为一个数据系统,不具备 ...

最新文章

  1. Jmeter简单应用6
  2. 中科大计算机是一流学科吗,安徽2017双一流学科排行榜:中国科技大学第一
  3. 142. 环形链表 II golang
  4. HibernateTemplate的一些常用方法总结
  5. 苏格拉底与失恋者的对话————最经典的失恋哲理 ...
  6. 项目疑难杂症记录(一):fragment单例导致的界面异常
  7. sqlserver使用depart获取当前日期月份及通过拼接得到日期时间
  8. numpy.zeros(np.zeros)
  9. 如何在知网下载PDF格式的硕博毕业论文?
  10. 程序员笔名、别名_适合程序员的英文名字
  11. 计算机网络 华东理工大学 2020期末考试
  12. 学c语言推荐哪种笔记本电脑,哪款笔记本适合大学生 推荐学生党笔记本电脑
  13. 哈代-温伯格平衡定律(The Hardy-Weinberg Equilibrium)
  14. vnpy量化回测怎么做?一文带你了解
  15. Vue+element 实现英雄榜功能
  16. 数字证书(安全校验)
  17. 软件实验室 计算机配置,《软件测试实验室》管理规定
  18. VSCODE+EIDE开发STM32
  19. 电商客服议价技巧分享
  20. MacBook Pro M1 Parallels Desktop 安装 Ubuntu

热门文章

  1. 如何提高银行系统的安全性?
  2. VB禁用CTRL +ALT + DEL(1)
  3. 英语总结系列(二):爽约Pauel叔十五天
  4. 苹果反垄断案败诉!应用商店30%抽成太高惹民怨,市值一夜跌了整个特斯拉
  5. 是不是好奇号不够好奇,NASA要送机器蜜蜂上火星?
  6. 【Java】 Java反射机制总结
  7. Oracle/MySQL decimal/int/number 转字符串
  8. 企业生产环境数据库备份锁表问题
  9. 【JVM】第1篇:JVM内存模型
  10. 【系列8】使用Dockerfile创建带MongoDB的Centos Docker镜像