`
aa87963014
  • 浏览: 157320 次
  • 性别: Icon_minigender_1
  • 来自: 布尼塔尼亚
社区版块
存档分类
最新评论

为什么感觉很多人都没考虑过线程安全问题?

阅读更多
有没有想过:
1、你的所有数据库操作curd方法都不是线程安全的
2、你的所有业务类都不是线程安全的
3、这不是用什么线程安全集合能解决的事情
4、业务是复杂的,需要同步的变量牵扯太多东西
5、考虑同步的时候又要去注意锁的粒度,范围

之所以没把线程安全当一回事,我觉得
1、并发量不高没有感觉到危机
2、出现了并发问题,但是由于业务的一些特性这些并发问题变成了小问题而且没有被察觉到
3、没有测试

实际上上面说的终究归咎于没有测试,当然提前要有这个意识,明白业务可能会出现什么问题。
举个例子来说:你在开开心心的写业务逻辑:

//变量

//方法{

    //进门
    //出门
}

方法很简单,进门之后出门,变量保存当前状态。
在你开开心心的打完收工的时候,有没有想过写的东西实际上就是一颗定时炸 弹:非线程安全
这个还只是一个非常简单的例子,可能你一会儿就看出来怎么去加锁让他变成线程安全的方法,这是件好事。

但是问题来了:这个例子只是非常初级的案例,回到各自的业务代码上来这种问题比比皆是。而且很多变量牵涉很多其他操作,你想把一个变量操作变成线程安全的,结果你发现这个变量又和其他变量有关。到最后你想把整个方法加锁,当然这种做法是极端不推荐的。

十几个方法操作同一个对象里面的若干个变量。给方法加锁?对象加锁?变量加锁?所多久?有没有想过这个加锁的快里面刚好有一个数据库操作,这个锁又会因为这个耗时的数据库操作影响多久?

虽然我也想把这些变量的操作方法写到对象里面去,然后给这个方法加锁。这是相当好的办法,效率也很高。
但是不是什么事情都事与愿违,我觉得我在线程安全问题上有些神经质了。
问题依然存在,不会因为你不神经质就让问题消失。你知道那里有个不定时炸 弹,在某个情况下可能就是因为一个小小的变量的值不正常导致流程错误,然后一堆人傻乎乎的被卡死在那里。

求指点,求打醒。我想知道大家在处理实际业务中的时候是怎么解决这种问题的,而不是在某个变量上加同步块。
分享到:
评论

相关推荐

    【Java毕业设计】豆瓣电影相关信息爬取。也看了一些爬虫程序,很多人都说有反爬机制,只能说,没看官方文档,一味的爬取.zip

    多线程与并发:为了提高爬取效率,可以使用多线程或异步IO技术,如Java的ExecutorService和CompletableFuture。但需要注意控制并发度,防止对目标服务器造成过大压力。 最后,项目的实现应当遵循良好的编程规范,...

    C++ 2005管理系统代码

    7. **多线程**:如果系统需要并发处理,可能使用了Windows API的线程函数或者C++11及更高版本提供的线程库。 8. **安全性**:考虑密码安全存储、输入验证等,以保护系统免受潜在攻击。 在进一步研究这个管理系统...

    二十三种设计模式【PDF版】

    因为很多人没有注意到这点,学完 Java 基础语言就直接去学 J2EE,有的甚至鸭子赶架,直接使用起 Weblogic 等具体 J2EE 软 件,一段时间下来,发现不过如此,挺简单好用,但是你真正理解 J2EE 了吗?你在具体案例中的...

    windows环境下32位汇编语言程序设计

    面对汹涌而来的Visual C++,Visual Basic,PowerBuilder和Java等各个领域的猛将,从DOS时代“为所欲为”的“系统警察”岗位下岗,在其他领域又没有一技之长,汇编语言似乎失去了生存的意义,有很多人在DOS转向...

    内存管理内存管理内存管理

    为什么必须管理内存 内存管理是计算机编程最为基本的领域之一。在很多脚本语言中,您不必担心内存是如何管理的,这并不能使得内存管理的重要性有一点点降低。对实际编程来说,理解您的内存管理器的能力与局限性至...

    操作系统(内存管理)

    为什么必须管理内存 内存管理是计算机编程最为基本的领域之一。在很多脚本语言中,您不必担心内存是如何管理的,这并不能使得内存管理的重要性有一点点降低。对实际编程来说,理解您的内存管理器的能力与局限性至关...

    新版Android开发教程.rar

    � A ndroid 在设计初期就考虑了与现其有业务的融合,改变以往从计算机为主改成从手机使用为导向。新 生应用如:G oogle 地图及其衍生应用、 GMail 、 GTalk 等。 � GPS 卫星导航功能,手机照相, MP3 ,蓝芽等均...

Global site tag (gtag.js) - Google Analytics