搜公众号
推荐 原创 视频 Java开发 开发工具 Python开发 Kotlin开发 Ruby开发 .NET开发 服务器运维 开放平台 架构师 大数据 云计算 人工智能 开发语言 其它开发 iOS开发 前端开发 JavaScript开发 Android开发 PHP开发 数据库
Lambda在线 > 机械键盘papapa > Java多线程-线程安全问题

Java多线程-线程安全问题

机械键盘papapa 2018-05-14
举报

什么是线程安全问题?

借用一位仁兄博客里的话:”如果你的代码所在的进程中有多个线程在同时运行,而这些线程可能会同时运行这段代码。如果每次运行结果和单线程运行的结果是一样的,而且其他的变量的值也和预期的是一样的,就是的。“


引发线程不安全的本质?

多个线程同时操作同一个数据。


异步和同步的概念

同步和异步的概念对于很多人来说是一个模糊的概念,是一种似乎只能意会不能言传的东西。其实我们的生活中存在着很多同步异步的例子。

比如:

你叫我去吃饭,我听到了就立刻和你去吃饭,如果我们有听到,你就会一直叫我,直到我听见和你一起去吃饭,这个过程叫同步;

异步过程指你叫我去吃饭,然后你就去吃饭了,而不管我是否和你一起去吃饭。而我得到消息后可能立即就走,也可能过段时间再走。

说的再简单点就是:

异步我在干活的时候,别人也在干,别人干活的时候,我也在干!

同步:我再干活的时候,别人不能干,别人干活的时候,我不能干!


解决线程不安全的方法

多线程都是异步的,而出现线程不安全的本质是多个线程操作了同一个对象,所以让线程安全的方法就是把多个线程操作同一个对象的操作给同步化,这样就不会出现线程不安全了。



同步代码块:

让这部分代码同步的方式。

synchronized (对象) {

//当前线程就持有了这个对象

}

对于这个对象的理解,某个线程一旦进入同步代码,会先判断这个对象是否被别的线程持有,一旦被别的线程持有,那么这个线程是无法进入这个同步代码块中的,只能等待;如果这个对象不被别的线程持有,那么这个线程可以持有这个对象并进入同步代码块。


很多人把这个对象叫做锁机制。可以理解为一段代码被一把锁开启,其他线程进入就会获取这把锁进入一个房子中,除非这个线程出来别的线程都是无法进入的,因为没有锁。当这个线程执行完同步代码块中的代码就可以从房子中出来,再把锁挂上,其他线程就能进入了。





线程安全问题演示视频:



使用同步代码块解决线程安全问题视频:







友情推荐:获取最近极客资讯,了解全球最黑科技,请关注--极客峰



版权声明:本站内容全部来自于腾讯微信公众号,属第三方自助推荐收录。《Java多线程-线程安全问题》的版权归原作者「机械键盘papapa」所有,文章言论观点不代表Lambda在线的观点, Lambda在线不承担任何法律责任。如需删除可联系QQ:516101458

文章来源: 阅读原文

相关阅读

关注机械键盘papapa微信公众号

机械键盘papapa微信公众号:jxjppapapa

机械键盘papapa

手机扫描上方二维码即可关注机械键盘papapa微信公众号

机械键盘papapa最新文章

精品公众号随机推荐

举报