synchronized同步记录
来源:互联网 发布:魅族flyme解锁软件 编辑:程序博客网 时间:2024/05/19 22:57
记录原因:在开发中查看了一些优秀的图片下载框架,经常用到Synchronized同步,由于自己对同步有点模糊了,特此记录,方便下次查阅!
synchronized分为同步方法和同步代码块。
synchronized锁定的内容可以是具体的对象也可以是当前类的所有对象
synchronized可以有static变量锁和非static变量锁
1.同步方法
/** * 对象锁<同步方法> 锁定的对象是具体的类对象 多个线程可以访问不同该对象的方法 但是对于同一个对象一次只能访问一次 */public synchronized void m1() throws InterruptedException {Thread.sleep(2000);System.out.println("---person.m1---");}当我们开启两个线程测试的时候,分别new出了Person p1,p2。当Thread1访问p1.m1()时,Thread2无法访问p1.m1(),但是Thread2可以访问p2.m1()。用法跟synchronized(this)是一样的效果。
2.用非static来当锁的时候
/** * 变量锁<同步块> 这种锁跟上方的对象锁是一个性质 不同线程可以访问不同变量 但是同一个对象一次只能访问一次 */Object a = new Object();// 变量锁public void m2() {synchronized (a) {try {Thread.sleep(3000);} catch (InterruptedException e) {e.printStackTrace();}System.out.println("---线程访问了变量锁---");}}当我们开启两个线程测试的时候,分别new出了Person p1,p2。当Thread1访问p1.m2()时,Thread2无法访问p1.m1(),但是Thread2可以访问p2.m2()。
3.用static变量 或者 xxx.class 作为锁的时候
<span style="white-space:pre"></span>static Object b = new Object();// 静态变量锁public void m3() {synchronized (b) {try {Thread.sleep(2000);} catch (InterruptedException e) {e.printStackTrace();}System.out.println("---线程访问了静态变量锁---");}}这些情况下不乱你开了多少个线程同时访问多少类对象的对象m3只能一次一次的被调用,起到了全局锁的效果。
同步对代码整体的性能是有害无利的,当然我们有时候不得不这么做,当我们用到synchronized的时候切记用对方法才能起到对应的效果。<over!!>
1 0
- synchronized同步记录
- 同步-synchronized
- synchronized同步
- 同步synchronized
- synchronized同步
- synchronized同步
- 记录Java多线程的同步问题---synchronized关键字的使用
- 记录一次关于synchronized同步代码块的问题
- java---synchronized同步机制
- synchronized多线程同步
- synchronized(同步)形象化
- 线程同步---synchronized
- Java同步机制--synchronized
- Java同步: synchronized用法
- 同步synchronized的问题
- Java synchronized同步机制
- synchronized同步锁详解
- 使用synchronized同步
- poj2246
- css文本属性
- RMI基础和例子
- 字符串拷贝
- 终于开通了博客好开 ,发几个搞笑的事让大家 更开心一下
- synchronized同步记录
- 对角线输出二维数组
- TX2440 vivi的makefile分析
- android笔记--Intent和IntentFilter详解
- 安卓 样式(Style)和主题(Theme)
- 倒序后输出十进制
- 数字特征值
- up someone's sleeve
- response重定向和request转发 通俗易懂