多线程之间实现同步看着一篇就够了!!!!!

多线程之间实现同步

为什么会有线程安全问题

当多个线程同时共享,同一个全局变量或静态变量,做写的操作时,可能会发生数据冲突问题,也就是线程安全问题。但是做读操作是不会发生数据冲突问题

线程不安全问题如何解决?

使用多线程之间的同步(同步代码块:synchronized)或者使用锁(并发包:jdk1.5 lock)

使用同步代码块

同步代码块:将可能会发生线程安全问题的代码给包括起来

synchronized(同一个数据){
    可能会发生线程冲突问题
}

使用synchronized包裹起来的代码每次只能让一个线程执行,且synchronized只适合单个jvm,synchronized是锁对象,并不是锁代码

使用同步方法

同步方法:在方法上修饰synchronzied成为同步函数

同步函数使用的this锁

静态同步方法

静态同步方法:方法加上static关键字,使用synchronized关键字进行修饰(当class文件也是字节码文件被加载时,才会被初始化)

静态的同步函数使用的锁是该函数所属字节码文件对象

可以用getClass方法获取,也可以用当前类名.class表示

线程死锁

多线程死锁:同步中嵌套同步,导致锁无法释放

比如A用this之后再拿到oj锁才能运行(锁名不必在意),B需要先拿oj锁后再拿this锁后才能运行,那如果当程序运行到某一刻A拿到了this锁,B拿到了oj锁。A在等B释放oj锁才能运行,B在等A释放this锁才能运行。两方互相等待,谁都不先释放,这就成了死锁

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

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值