Java进阶1. Synchronized 关键字
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 关键字相关推荐
- Java多线程:synchronized关键字和Lock
一.synchronized synchronized关键字可以用于声明方法,也可以用来声明代码块,下面分别看一下具体的场景(摘抄自<大型网站系统与Java中间件实践>) 案例一:其中fo ...
- Java 多线程:synchronized 关键字用法(修饰类,方法,静态方法,代码块)
前言 在 多线程生成的原因(Java内存模型与i++操作解析) 中,介绍了Java的内存模型,从而可能导致的多线程问题.synchronized就是避免这个问题的解决方法之一.除了 synchroni ...
- Java 并发编程—Synchronized关键字
原文作者:liuxiaopeng 原文地址:Java并发编程:Synchronized及其实现原理 目录 一.Synchronized的基本使用 二.Synchronized 原理 三.运行结果解释 ...
- java synchronized_Java中synchronized关键字理解
好记性不如烂笔头~~ 并发编程中synchronized关键字的地位很重要,很多人都称它为重量级锁.利用synchronized实现同步的基础:Java中每一个对象都可以作为锁.具体表现为以下三种形式 ...
- Java并发之synchronized关键字
简介 Java中每个对象都可以作为锁,这也是synchronized实现同步的基础.当线程试图访问同步代码时,首先必须要先获得对象锁,且抛出异常或退出时必须释放锁.synchronized实现同步的方 ...
- Java进阶:synchronized使用详解
1. synchronized的作用 锁住代码块,保证同一段代码在某一时刻只能有一个线程执行,该线程执行完毕后,其他线程再执行.目的是防止多线程并发操作导致的异常. 例如:当前有个变量count=0, ...
- 【JAVA进阶】static关键字详解
- java synchronized关键字_Java synchronized 关键字,你用的对吗?
for (int i = 0; i < 5; i++) {System.out.println(Thread.currentThread.getName + " " + i) ...
- 从分布式锁角度理解Java的synchronized关键字
分布式锁 分布式锁就以zookeeper为例,zookeeper是一个分布式系统的协调器,我们将其理解为一个文件系统,可以在zookeeper服务器中创建或删除文件夹或文件.设D为一个数据系统,不具备 ...
最新文章
- Jmeter简单应用6
- 中科大计算机是一流学科吗,安徽2017双一流学科排行榜:中国科技大学第一
- 142. 环形链表 II golang
- HibernateTemplate的一些常用方法总结
- 苏格拉底与失恋者的对话————最经典的失恋哲理 ...
- 项目疑难杂症记录(一):fragment单例导致的界面异常
- sqlserver使用depart获取当前日期月份及通过拼接得到日期时间
- numpy.zeros(np.zeros)
- 如何在知网下载PDF格式的硕博毕业论文?
- 程序员笔名、别名_适合程序员的英文名字
- 计算机网络 华东理工大学 2020期末考试
- 学c语言推荐哪种笔记本电脑,哪款笔记本适合大学生 推荐学生党笔记本电脑
- 哈代-温伯格平衡定律(The Hardy-Weinberg Equilibrium)
- vnpy量化回测怎么做?一文带你了解
- Vue+element 实现英雄榜功能
- 数字证书(安全校验)
- 软件实验室 计算机配置,《软件测试实验室》管理规定
- VSCODE+EIDE开发STM32
- 电商客服议价技巧分享
- MacBook Pro M1 Parallels Desktop 安装 Ubuntu