synchronized同步关键字三种写法和开发中如何解决线程安全问题


前言

为了保证线程安全,我们可以采用synchronized同步关键字


一、同步代码块

优点:灵活
注意:synchronized关键字后的小括号中填写的一定是线程共享的对象,希望哪些线程进行排队,就填写这些线程的对象。

代码如下(示例):

synchronized(线程共享对象){
	同步代码块;
}

二、在实例方法上使用synchronized

表示共享对象一定是this,并且同步代码块是整个方法体。

代码如下(示例):

public synchronized void HelloWorld(){
	方法体;
}

三、在静态方法上使用synchronized

表示找类锁,类锁永远只有一把,就算创建100个对象,类锁也只有一把。

类锁:100个对象,也只有一把类锁。
类锁就是排他锁,为了保护静态变量的线程安全。

代码如下(示例):

public synchronized static void HelloWorld(){
	方法体;
}

总结:开发中如何解决线程安全问题

第一种方案

尽量使用局部变量代替“实例变量和静态变量”。

第二种方案

如果必须是实例变量,那么可以考虑创建多个对象,
这样实例变量的内存就不共享了(一个线程对应一个对象,100个线程对应100个对象,对象不共享,就没有数据安全问题了)

第三种方案

如果不能使用局部变量,对象也不能创建多个,只能选择synchronized同步关键字,使用线程同步机制。

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值