synchronized(class)、synchronized(this)与synchronized(object)的区别分析
来源:互联网 发布:openwrt端口转发 编辑:程序博客网 时间:2024/04/30 11:37
JAVA中synchronized关键字能够作为函数的修饰符,也可作为函数内的语句,也就是平时说的同步方法和同步语句块。假如再细的分类,synchronized可作用于instance变量、object reference(对象引用)、static函数和class literals(类名称字面常量)身上。synchronized
void
f() {
/* body */ }
和void f() { synchronized(this) { /* body */
} }
是完全等价的。
synchronized(class)很特别,它会让另一个线程在任何需要获取class做为monitor的地方等待。class与this作为不同的监视器可以同时使用,不存在一个线程获取了class,另一个线程就不能获取该class的一切实例。
- 对于实例同步方法,锁是当前实例对象。
- 对于静态同步方法,锁是当前对象的Class对象。
- 对于同步方法块,锁是Synchonized括号里配置的对象。
synchronized(class)
synchronized(this)
线程各自获取monitor,不会有等待。
synchronized(this)synchronized(this)
如果不同线程监视同一个实例对象,就会等待;如果不同的实例,不会等待。
synchronized(class)
synchronized(class)
如果不同线程监视同一个实例或者不同的实例对象,都会等待。
public class Thread2{ public static void main(String[] args) { Job job1 = new Job(); Job job2 = new Job(); T1 t1 = new T1(job1); T2 t2 = new T2(job2); t1.start(); t2.start(); }}class Job{ public void doTest(){// synchronized(Job.class){ synchronized (this){ try { String name = Thread.currentThread().getName(); System.out.println("name = "+name); Thread.sleep(3000); } catch (InterruptedException e) { e.printStackTrace(); } } }}class T1 extends Thread{ private Job job; public T1(Job job){ super("A"); this.job = job; } @Override public void run() { job.doTest(); }}class T2 extends Thread{ private Job job; public T2(Job job){ super("B"); this.job = job; } @Override public void run() { this.job.doTest(); }}
转载自:http://blog.csdn.net/mn11201117/article/details/8712946
0 0
- synchronized(class)、synchronized(this)与synchronized(object)的区别分析
- synchronized(this)、synchronized(class)与synchronized(Object)的区别
- synchronized(class)、synchronized(this)与synchronized(object)
- synchronized(class)、synchronized(this)与synchronized(object)
- synchronized(class)、synchronized(this)与synchronized(object)
- synchronized(this)与synchronized(class)区别
- synchronized(this)与synchronized(class)的区别
- synchronized(this)与synchronized(class)
- synchronized(this)与synchronized(class)
- synchronized(this)与synchronized(class)
- synchronized(this)与synchronized(class)
- synchronized(class)与synchronized(this)
- synchronized(this)与synchronized(class)
- synchronized(class) 与 synchronized(this)区别
- synchronized(this)和synchronized(object)区别
- synchronized(this)和synchronized(object)区别
- java synchronized关键字this与this.Class的区别
- Java中Synchronized(this)和Synchronized(class)的区别
- 设置BaseSDK和DeploymentTarget
- Xcode创建一个本地的Html
- JS数组方法汇总 ARRAY数组元素的添加和删除
- 三岁小孩吃后身亡,这东西太多了!吃它的禁忌你一定得知道!
- RevStrSort
- synchronized(class)、synchronized(this)与synchronized(object)的区别分析
- 基于AppDomain的"插件式"开发
- java HashMap
- 从svn中check out maven项目 所遇到的一系列问题:
- IgnoreCaseSort
- POJ 2688 简单的TSP问题,状压DP
- 4034: [HAOI2015]T2 (树链剖分)
- my.ini配置文件引起的"无法启动mysql服务,发生错误1067"
- .bash_profile和.bashrc的区别(如何设置生效)