Synchronized的使用

1.为什么要使用synchronized 

在并发编程中存在线程安全问题,主要原因有:1.存在共享数据 2.多线程共同操作共享数据。关键字synchronized可以保证在同一时刻,只有一个线程可以执行某个方法或某个代码块,同时synchronized可以保证一个线程的变化可见(可见性)

2.实现原理

synchronized可以保证方法或者代码块在运行时,同一时刻只有一个方法可以进入到临界区,同时它还可以保证共享变量的内存可见性


3.synchronized的作用

(1)确保线程互斥的访问同步代码

(2)保证共享变量的修改能够及时可见

(3)有效解决重排序问题。

4.Synchronized的两个用法:

1)对象锁

包括方法锁(默认锁对象为this当前实例对象)和同步代码块锁(自己指定锁对 象)

2)类锁:

指Synchronized修饰静态的方法或指定锁为Class对象


5.1举栗子

先登入--http://127.16.9.146:8885/api/v1/auth/login

--http://127.16.9.146:8885/api/v1/dubbo/test

 Synchronized:同步的代码块,使用的是最基本的线程同步,他锁住的是Object对象,那么第一个线程来执行的时候,他必须拿到Object这个对象的钥匙,也可以说是锁。就可以执行下面的代码块。当第二个线程执行时,它会去看能不能拿到这个锁,如果说它没有拿到的话,他必须等待第一个线程把这个锁释放掉之后,他才能往下执行

5.2举栗子

 

如果说每一次都要new一个对象来当锁的话,是不是有点麻烦,可以直接写this

5.3举例子

如果说代码块在一开始的时候就需要使用锁,那么就可以把Synchronized加到方法上面,相当于是Synchronized(this)

5.4举例子

是否能替换this?

不可以,因为使用的是静态方法,他在调用的时候不需要new Demo,Synchronized锁住的是两种对象,第一个是类的实例,第二个是类的字节码

5.5举例子

继承了实现了Runnable接口,那么他可以直接当成一个线程来使用,主线程new了一个Demo ,使用for循环开了五个线程,去执行Demo里的run方法

run方法加ynchronized和不加ynchronized的区别?

 

5.6举例子

和上面的例子差不多,只不过把Demo放到for循环里面new,

分析:输出的值是什么?

5.7举例子

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值