美文网首页Java Concurrencyjs css html
Java锁 synchronized(this),synchro

Java锁 synchronized(this),synchro

作者: 在岁月中远行 | 来源:发表于2022-11-27 02:10 被阅读0次

1 synchronized(Object):同一个object对象

先上代码看看:SynchronizedDemo1类中 有这么一句代码Object object =new Object();

创建了一个全局的object变量。作为对象锁

新建了4个线程去执行方法,我们来看运行结果。

可以分析出来:当线程1抢到CPU时间片时,开始执行时synchronizedDemo1对象的test1方法时候,虽然test1方法体用synchronized同步块包起来的,但是其他线程比如Thread4就可以对synchronizedDemo1对象的非同步方法进行访问

等到线程1执行完毕后,线程2抢到了CPU时间片,这时就执行方法体,此时不允许其他线程访问,直到访问结束,最后线程3抢到时间片执行。

线程执行顺序是抢到CPU时间片 抢占式的 也有可能线程3开始抢到CPU时间片

当有两个对象时候,这时发现有两个线程1和线程5对test1进行了访问,说明全局的object变量。作为对象锁和synchronized (this)锁的是当前对象。

synchronized(Object):不是同一个object对象

这种其实是达不到锁的效果的,可以看出来在同一时刻线程1和线程2都对test1方法进行了访问。这种就会存在线程不安全的。所以synchronized(object)这种一般final ObjectmDataLock =new Object();为final不可再次赋值改变的对象object。

2 synchronized(this) 同一个对象:

这种其实和synchronized(Object):同一个object对象 一样的

synchronized(this) 不同对象:

test1方法有线程1和线程5同时访问。

结论:synchronized(this)代码块是锁定实例化的对象,每个对象有其独立的对象锁,互不干扰。

当多个并发线程访问同一个对象的这个synchronized(this)同步代码块时,一个时间内只能有一个线程得到执行,另一个线程必须等待当前线程执行完这个代码块以后才能执行该代码块。

当一个线程访问对象的一个synchronized(this)同步代码块时,另一个线程仍然可以访问该对象中的非

synchronized(this)同步代码块。

当一个线程访问对象的一个synchronized(this)同步代码块时,其他线程对对象中所有其他synchronized(this)同步代码块的访问将被阻塞。

synchronized方法 效果其实和synchronized(this)使用的同一把锁。效果一样的。

下面来看synchronized(class):

结论:synchronized(class)锁是对类的所有实例对象起作用 类锁

当一个对象访问test1时,只有另外线程4和线程8访问了这个对象的非同步代码块test3,并没有另一个对象调用test1方法,说明被类锁锁住了。起了作用了。

synchronized static方法:和synchronized(class)锁类似的。

相关文章

  • Java锁 synchronized(this),synchro

    1 synchronized(Object):同一个object对象 先上代码看看:SynchronizedDem...

  • @Synchronized

    @Synchronized synchronized 做得对:不要暴露你的锁。 Overview @Synchro...

  • synchronized

    简介 synchronized时java中的一个关键字, 用于控制并发, 也是java中的重量级锁。synchro...

  • Lock锁

    Lock和synchronized都是可重入锁,线程进程synchronized的A方法可以在此进入synchro...

  • 最简单的理解synchronized锁升级

    前言 java提供两种锁:lock和synchronized,关于二者的区别,网上一个说法非常好: synchro...

  • 主要并发工具类-ReentrantLock的使用

    ReentrantLock 在使用上比synchronized稍微复杂点,需要显示的获取锁和释放锁。synchro...

  • java 的锁?

    一、类锁 与 对象锁 类锁:任何时候都有效 在方法上加上static synchronized的锁 synchro...

  • java并发知识整理

    Synchronized 编译器去保证锁的加锁和释放 jdk1.6 引入了偏向锁,轻量级锁(自旋锁)synchro...

  • Synchronized和Lock的区别

    1、Lock是java的一个interface接口,而synchronized是Java中的关键字,synchro...

  • Java并发:解决资源竞争

    解决资源竞争 Java 提供关键字 synchronized 的内置支持。 使用 Lock 对象。 synchro...

网友评论

    本文标题:Java锁 synchronized(this),synchro

    本文链接:https://www.haomeiwen.com/subject/rndhfdtx.html