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主,访问该类中所有的同步方法,不会对象是不是同一个,都会阻塞。
Java进阶1. Synchronized 关键字的更多相关文章
- 巨人大哥谈Java中的Synchronized关键字用法
巨人大哥谈Java中的Synchronized关键字用法 认识synchronized 对于写多线程程序的人来说,经常碰到的就是并发问题,对于容易出现并发问题的地方价格synchronized基本上就 ...
- Java并发之synchronized关键字深度解析(二)
前言 本文继续[Java并发之synchronized关键字深度解析(一)]一文而来,着重介绍synchronized几种锁的特性. 一.对象头结构及锁状态标识 synchronized关键字是如何实 ...
- 深入理解java中的synchronized关键字
synchronized 关键字,代表这个方法加锁,相当于不管哪一个线程A每次运行到这个方法时,都要检查有没有其它正在用这个方法的线程B(或者C D等),有的话要等正在使用这个方法的线程B(或者C D ...
- java中的synchronized关键字
参考:http://www.cnblogs.com/devinzhang/archive/2011/12/14/2287675.html 多线程并发问题的根因: 在一个对象中有一个变量i=0,有两个线 ...
- java多线程中synchronized关键字的用法
转自:http://www.cdtarena.com/javapx/201308/9596.html 由于同一进程内的多个线程共享内存空间,在Java中,就是共享实例,当多个线程试图同时修改某个实例的 ...
- java 线程及synchronized关键字
从本篇开始,我们将会逐渐总结关于java并发这一块的内容,也可以理解为是我的笔记,主要来自于一些博客和java书籍中的内容,所有的内容都是来自于他们之中并且加上了我自己的理解和认识. ...
- Java并发之synchronized关键字
上篇文章我们主要介绍了并发的基本思想以及线程的基本知识,通过多线程我们可以实现对计算机资源的充分利用,但是在最后我们也说明了多线程给程序带来的两种典型的问题,针对它们,synchronize ...
- Java多线程:synchronized关键字和Lock
一.synchronized synchronized关键字可以用于声明方法,也可以用来声明代码块,下面分别看一下具体的场景(摘抄自<大型网站系统与Java中间件实践>) 案例一:其中fo ...
- Java中的Synchronized关键字用法
认识synchronized 对于写多线程程序的人来说,经常碰到的就是并发问题,对于容易出现并发问题的地方加上synchronized修饰符基本上就搞定 了,如果说不考虑性能问题的话,这一招绝对能应对 ...
随机推荐
- hdu5558 Alice's Classified Message
地址:http://acm.split.hdu.edu.cn/showproblem.php?pid=5558 题目: Alice's Classified Message Time Limit: 1 ...
- docker for spark
项目需求,有一个spark-streaming的程序,读kafka的数据,需要构建一个不使用hadoop的spark 以下建立的镜像参考网络,可以稍加修改就可以使用不同的版本. 可单独启动master ...
- 不允许有匹配 "[xX][mM][lL]" 的处理指令目标
八月 , :: 上午 org.apache.tomcat.util.digester.SetPropertiesRule begin 警告: [SetPropertiesRule]{Server/Se ...
- 使用自签名SSL证书配置HTTPS,解决浏览器提示不安全警告
项目测试过程中需要将应用从HTTP升级到HTTPS,浏览了网上一些帖子,参考<WebLogic11g-单双向SSL配置(以Springside3为例)>一文使用openssl工具来自建CA ...
- 使用selenium前学习HTML(3)——元素
<!-- HTML 元素指的是从开始标签(start tag)到结束标签(end tag)的所有代码. 注释:开始标签常被称为开放标签(opening tag),结束标签常称为闭合标签(clos ...
- C++之操作Excel(抄录https://www.cnblogs.com/For-her/p/3499782.html)
MFC操作Excel 下面的操作基于Excel2003 一.初始化操作 1.导入类库 点击查看->建立类向导-> Add Class...\From a type Library...-& ...
- webservice使用方法
1,右击项目选择-->添加服务引用: 填写一个 命名空间名称; 2, 实例化 命名空间名称 ; 选择 带client的服务名称进行初始化 3,开始调用方法 // 带参数的webservice ...
- Linux各目录缩写含义
Unix已经有35年历史了.许多人认为它开始于中世纪,这个中世纪是相对于计算机技术的产生和发展来说的.在过去的时间里,Unix和它的子分支Linux收集有许多的历史和一些完全古老的语言.在这篇技巧文章 ...
- 20144303 《Java程序设计》第九周学习总结
20144303 <Java程序设计>第九周学习总结 教材学习内容总结 第十六章 一.JDBC入门: JDBC全名Java DataBase Connectivity,是java联机数据库 ...
- MysQL使用一高级应用(下)
连接查询 连接查询分类如下: 表A inner join 表B:表A与表B匹配的行会出现在结果中 表A left join 表B:表A与表B匹配的行会出现在结果中,外加表A中独有的数据,未对应的数据使 ...