栏目分类:
子分类:
返回
名师互学网用户登录
快速导航关闭
当前搜索
当前分类
子分类
实用工具
热门搜索
名师互学网 > IT > 软件开发 > 后端开发 > Java

什么是线程安全问题,如何解决?

Java 更新时间: 发布时间: IT归档 最新发布 模块sitemap 名妆网 法律咨询 聚返吧 英语巴士网 伯小乐 网商动力

什么是线程安全问题,如何解决?

多线程在同一时间内对同一资源(变量,代码块,数据等)进行访问,可能会出现线程同步的问题;

锁机制

synchronized关键字

可以用来修饰方法或者代码块

提高代码的安全性,但是会降低性能

同步方法

语法:

public synchronized  修饰符 方法名(。。){。。。}

当第一个线程进入后,会自动上锁,其它的线程就访问不了了,当前面的线程执行完成后,会自动释放锁,其它的线程就可以访问了。

同步代码块

它是声明在方法内的

语法:

public 返回值类型  方法名(){

synchronized(对象实例){

需要上锁的代码块}

}

锁的对象:

①任意的java对象都可以作为synchronized关键字所需要的实例

②不能是局部变量

总结:

同步方法和同步代码块的区别:

1,声明的位置不同:同步方法声明在方法上,同步代码块在方法内;

2,锁的粒度不同:同步方法的锁粒度比较大,同步代码块较小;

3,效率不同:同步方法的效率略低

4,锁对象不同:同步方法的锁对象是固定,静态的就是当前类.class,非静态就是this,

同步代码块的锁对象是可以指定的

关键字synchronied的实现原理:

通过监视器monitor实现:

它的内部监视器有一个计数器,默认是0,当一个线程进入后会+1.当下一个进程来时,计数器为1,监视器不允许进入,当前一个线程执行完退出后,计数器-1,当其它线程来访问时,计数器为0 ,监视器允许进入。

转载请注明:文章转载自 www.mshxw.com
本文地址:https://www.mshxw.com/it/1032414.html
我们一直用心在做
关于我们 文章归档 网站地图 联系我们

版权所有 (c)2021-2022 MSHXW.COM

ICP备案号:晋ICP备2021003244-6号