从头认识多线程-2.13 synchronized ()代码块不单可以用this,也可以用其他对象
来源:互联网 发布:安全防护眼镜知多少 编辑:程序博客网 时间:2024/06/05 11:59
这一章节我们来讨论一下synchronized ()代码块的另一个用法,它不单可以用this,也可以用其他对象。
1.代码清单
package com.ray.deepintothread.ch02.topic_13;/** * * @author RayLee * */public class ObjectLock {public static void main(String[] args) throws InterruptedException {MyService myService = new MyService();ThreadOne threadOne = new ThreadOne(myService);Thread thread = new Thread(threadOne);thread.start();ThreadTwo threadTwo = new ThreadTwo(myService);Thread thread2 = new Thread(threadTwo);thread2.start();}}class ThreadOne implements Runnable {private MyService myService;public ThreadOne(MyService myService) {this.myService = myService;}@Overridepublic void run() {try {myService.updateA();} catch (InterruptedException e) {e.printStackTrace();}}}class ThreadTwo implements Runnable {private MyService myService;public ThreadTwo(MyService myService) {this.myService = myService;}@Overridepublic void run() {try {myService.updateB();} catch (InterruptedException e) {e.printStackTrace();}}}class MyService {private Object object;public MyService() {object = new Object();}public void updateA() throws InterruptedException {synchronized (object) {long startTime = System.currentTimeMillis();System.out.println("updateA startTime:" + startTime);Thread.sleep(1000);long endTime = System.currentTimeMillis();System.out.println("updateA endTime:" + endTime);}}public void updateB() throws InterruptedException {synchronized (object) {long startTime = System.currentTimeMillis();System.out.println("updateB startTime:" + startTime);Thread.sleep(1000);long endTime = System.currentTimeMillis();System.out.println("updateB endTime:" + endTime);}}}
输出:
updateA startTime:1462455786957
updateA endTime:1462455787958
updateB startTime:1462455787958
updateB endTime:1462455788958
2.结论
从输出可以看见,跟前面章节的代码相比,我们把synchronized ()里面的this换成一个new Object(),而且这个object不一定是object,可以是任何对象
总结:这一章节展示了synchronized ()代码块的另一个用法,它不单可以用this,也可以用其他对象。
这一章节就到这里,谢谢
------------------------------------------------------------------------------------
我的github:https://github.com/raylee2015/DeepIntoThread
目录:http://blog.csdn.net/raylee2007/article/details/51204573
这一章节就到这里,谢谢
------------------------------------------------------------------------------------
我的github:https://github.com/raylee2015/DeepIntoThread
目录:http://blog.csdn.net/raylee2007/article/details/51204573
- 从头认识多线程-2.13 synchronized ()代码块不单可以用this,也可以用其他对象
- 从头认识多线程-2.12 synchronized标记的方法和synchronized(this)标记的代码块锁定的是当前对象
- 从头认识多线程-2.11 通过同步代码块证明synchronized标记的是对象锁
- 从头认识多线程-2.26 synchronized同步代码块在jvm是怎样执行的?
- 用VS2005(其他版本也可以)调试dump文件
- 多线程 synchronized(this)与 synchronized(非this)同步代码块的区别
- 不会用多线程,也可以解决死机的问题
- 从头认识多线程-2.2 synchronized持有对象锁与类锁的相同点
- 从头认识多线程-2.3 synchronized持有对象锁与类锁的不同点
- 从头认识java-18.6 synchronized在其他对象上同步和ThreadLocal来消除共享对象的同步问题
- 从头认识多线程-4.2 对象逸出的其他解决方案-主要是ThreadLocal的应用
- 从头认识多线程-2.9 缓解同步方法的隐患-同步代码块
- 从头认识多线程-2.10 同步代码块的特殊现象:一半同步,一半异步
- 从头认识多线程-2.17 同步静态方法和静态代码块
- 从头认识多线程-2.18 同步方法与同步静态代码块持有的是不同的锁
- 这样用也可以的!
- makefile 嵌入式也可以用
- chrome无法连接到代理服务器,IE也上不了,但是QQ可以登陆,其他软件可以用的解决方法
- Markdown编辑器
- 关联规则-web数据挖掘学习2
- js 基本类型与引用类型的区别
- 347. Top K Frequent Elements
- 蓝牙技术概述
- 从头认识多线程-2.13 synchronized ()代码块不单可以用this,也可以用其他对象
- Object-c------ARC的基本使用
- 商务智能日记16.5.5
- Windows驱动开发蓝屏(代码:0x0000007f)
- 图解HTTP
- printf重定向后的Log机制
- Netty高性能之道
- android studio 学习笔记之 非法字符: '\ufeff'问题解决
- Oracle基础 -- SQLPlus如何查看procedure的内容