3. 对比两者在锁定对象上的区别 synchronized(this)锁定的是当前对象实例,它只影响当前实例的并发访问。 synchronized(MyClass.class)锁定的是类本身,它影响该类的所有实例的并发访问。 4. 对比两者在并发访问控制上的效果 使用synchronized(this)时,不同的实例之间互不影响,每个实例都有自己独立的锁。 使用synchronize...
1、对于静态方法,由于此时对象还未生成,所以只能采用类锁; 2、只要采用类锁,就会拦截所有线程,只能让一个线程访问。 3、对于对象锁(this),如果是同一个实例,就会按顺序访问,但是如果是不同实例,就可以同时访问。 4、如果对象锁跟访问的对象没有关系,那么就会都同时访问。
2、这个肯定加锁失败,两个线程可以同时访问。 3、这个因为是静态,而且是不同的实例,根据定律也是可以加锁成功,两个线程不能同时访问。 4、这里因为一个是实例方法锁,一个是类方法锁,锁的对象不同,所以可以被同时访问。 二、synchornized(this)和synchronized(.class) 对象锁只对当前对象进行加锁,锁this和synchr...
从上述结果可以看出,当使用 synchronized 加锁 this 时,如果线程调用的不是同一个对象,那么这些线程之间使用的锁都是自己独立的锁,这个结果就和 synchronized 加锁 class 的结果完全不同了。 总结 通过以上 4 个示例我们可以得出结论,当使用 synchronized 加锁 class 时,无论共享一个对象还是创建多个对象,它们用的...
synchronized方法 效果其实和synchronized(this)使用的同一把锁。效果一样的。 下面来看synchronized(class): 结论:synchronized(class)锁是对类的所有实例对象起作用 类锁 当一个对象访问test1时,只有另外线程4和线程8访问了这个对象的非同步代码块test3,并没有另一个对象调用test1方法,说明被类锁锁住了。起了作用了...
synchronized(ThreadTest.class)是对ThreadTest这个类进行加锁,类里面的属性,方法都是同步的,是针对于特定的类的~~synchronized(this){}是对{}这里面的内容进行加锁的,仅仅是针对于当前对象的
当一个线程访问Synchronized类的一个synchronized (this)同步代码块时,其它线程对同一个Synchronized类中其它的synchronized ()同步方法的访问将是堵塞;访问synchronized (Synchronized.class)同步代码块时, static synchronized同步方法的访问将是阻塞,这说明synchronized (this)和synchronized ()同步方法、synchronized (Synchron...
synchronized (this) { } } 1. 2. 3. 4. 5. 或 public static void doLongTimeTaskE() { // 类锁 synchronized (Task.class) { } } 1. 2. 3. 4. 5. 对象锁和类锁是两个完全不一样的锁,下面通过实例看看他们的区别。 二 对象锁