ThreadSafe:诊断并发问题的利器

标签: threadsafe 诊断 并发 | 发表时间:2014-03-14 05:20 | 作者:
出处:http://it.deepinmind.com

听到ThreadSafe这个东西我的第一反应就是, ”天啊,又出了一个静态代码分析工具”。在内部开发中引入了像PMD或者FindBugs这类的工具,又花了不少时间优化成零警告后,我感觉已经不再需要其它的工具了。不过我真的错了。

ThreadSafe这个工具跟别的代码分析工具一样,但有一点不同,它更专注于Java开发中一个非常重要的领域——并发。Contemplate的小伙伴们太给力了,他们注意到了需要有这么个工具,能快速定位到代码中可能存在的并发,多线程相关的问题。

这个工具有两种使用方法——Eclipse插件或者Sonar插件。我用了下它的Eclipse插件去分析了inspectIT的源码,我们开发的一款免费的性能分析的工具。装这个插件,分析完所有的代码,一共才花了不到3分钟,就得到了一些很有价值的结果。

我看到这些结果的第一印象就是,“别说,这些警告还真挺到位”。我讨厌那些报告了一堆信息,最后没多少有用的工具。ThreadSafe目前有18条规则,而且这些规则都定义的非常仔细巧妙。每条规则的文档也非常详细,每个人都能看明白具体的警告信息是什么意思。

在我们的工程中,ThreadSafe发现了9大类一共44个潜在的问题。出现最多的问题是不一致同步(15)以及非原子调用get/check/put(10)。修复这些问题用不了多长时间,因为只要你知道哪有问题,如何能解决,很快你就能搞定了。

下面给出一个使用ThreadSafe的例子,我把我们类里的一个问题的描述进行了截图,并且把相关的代码也一并放出来:

   public abstract class AbstractSensorConfig {


     private List<PropertyPathStart> propertyAccessorList = new CopyOnWriteArrayList<PropertyPathStart>();

    public void setPropertyAccessorList(List<PropertyPathStart> propertyAccessorList) {
               this.propertyAccessorList = propertyAccessorList;
        } 

正如你所看到的,我们很容易就发现有一个类,它用一个线程安全的列表初始化了一个字段,但又定义了一个public的setter方法来修改这个值,而这个方法接受的是一个list接口。这意味这个线程安全的列表很容易就会被任何类型的列表实现所覆盖,这会导致同步的问题,因为这个类期望操作的是一个线程安全的list。多亏了有了TheadSafe,这些问题都轻松的解决了。

我认为正确的使用并发是所有高性能程序的基础,我也相信ThreadSafe可以极大的减少并发的错误实现带来的隐患。因此,每个工程都应该考虑使用像ThreadSafe这样的工具,在开发阶段就把问题及早的解决掉。

译注:本文只是ThreadSafe的简单介绍,更详细的使用方法可以参考官方文档或者 http://www.infoq.com/articles/Java-Concurrency-Static-Analysis-with-ThreadSafe

原创文章转载请注明出处: ThreadSafe:诊断并发问题的利器

英文原文链接

相关 [threadsafe 诊断 并发] 推荐:

ThreadSafe:诊断并发问题的利器

- - Java译站
听到ThreadSafe这个东西我的第一反应就是, ”天啊,又出了一个静态代码分析工具”. 在内部开发中引入了像PMD或者FindBugs这类的工具,又花了不少时间优化成零警告后,我感觉已经不再需要其它的工具了. ThreadSafe这个工具跟别的代码分析工具一样,但有一点不同,它更专注于Java开发中一个非常重要的领域——并发.

如何诊断CDN故障

- - 火丁笔记
某项目使用CDN做文件下载服务,最近不时有网友反馈下载出错,因为CDN是第三方提供的,且节点众多,所以诊断起来有点麻烦,必须想想招儿. 首当其冲的问题是如何确认CDN有哪些节点. 幸运的是通过 阿里测提供的服务,我们能拿到这个IP列表,当然这个IP列表不可能百分百完整,不过应该包含了大部分的节点,有兴趣的可以参考 百度的JQuery CDN例子.

JVM诊断调优CheatSheet

- - ImportNew
使用top去获取进程cpu使用率;使用/proc文件查看进程所占内存. 查看类的一些信息,如字节码的版本号、常量池等. 查看进程的gc情况. jstat -gcutil [pid] (显示总体情况). jstat -gc [pid] 1000 10(每隔1秒刷新一次 一共10次). 查看jvm内存使用状况.

初步诊断你的 GC

- - IT瘾-dev
本文是好友阿飞写的,并且经过作者同意发的原创. 阿飞Javaer,转载请注明原创出处,谢谢. JVM的GC机制让Java程序员省去了自己垃圾回收的烦恼,大大提高了生产效率. 但是正因为JVM垃圾回收机制足够优秀,导致很多Java程序员对JVM这个黑盒了解甚少,很多人没有去了解它,很多人也没机会去了解它.

使用pt-stalk诊断MySQL问题

- - haohtml's blog
在MySQL服务器出现短暂(5~30秒)的性能波动的时候,一般的性能监控工具都很难抓住故障现场,也就很难收集对应较细粒度的诊断信息. 另外,如果这种波动出现的频率很低,例如几天才一次,我们也很难人为的抓住现场,收集数据. 这正是pt-stalk所解决的问题. pt-stalk是 Percona-Toolkit的一部分(其前身是 Aspersa的一部分).

网站诊断之建议篇

- - Google 黑板报 - Google (谷歌)中国的博客网志,走近我们的产品、技术和文化
发表者:谷歌中文搜索质量团队. 转载自: 谷歌中文网站管理员博客. 发布时间:2012年1月18日 上午 10:46:00. 几周之前,我们曾邀请非营利性的公益网站站长向我们的搜索质量团队提交他们的网站,参加我们的在线网站诊断活动. 感谢积极参加此次活动的公益网站站长. 现在我们根据提交的网站,总结出了一些需要改进的地方,并提供了一些建议以及您可以从谷歌获得的资源.

使用pt-stalk诊断MySQL问题

- - OurMySQL
在MySQL服务器出现短暂(5~30秒)的性能波动的时候,一般的性能监控工具都很难抓住故障现场,也就很难收集对应较细粒度的诊断信息. 另外,如果这种波动出现的频率很低,例如几天才一次,我们也很难人为的抓住现场,收集数据. 这正是pt-stalk所解决的问题. pt-stalk是 Percona-Toolkit的一部分(其前身是 Aspersa的一部分).

诊断Java中的内存泄露

- - ImportNew
每次我怀疑有内存泄漏时,我都要翻箱倒柜找这些命令. 首先,我用下面的命令监视进程:. (如果有的话还有New Relic). 如果你看到内存上升很快,可能是因为虚拟机设置. 如果你没有明确指定JVM的内存设置,它将设置默认值给他们. 如果这些都不符合你所希望的,那么你就需要指定JVM的内存设置. 可以用下面的命令设置最小和最大堆大小:.

豪斯801:铁窗内的诊断(剧透慎入)

- 猫 - 果壳网 guokr.com - 果壳网
继将好兄弟Wilson的爱车开进旧情人Cuddy阿姨的客厅后,备受伤害的House大叔终于在等待假释的看守所内找到了新的刺激. 当然,编剧没有忘记为House安插新的小朋友进行调教:这次被House征服的是具有一副混血面孔的美丽女狱医Adams. House在新剧集里再次展现了惊人的天赋. 过人的观察力、大胆的推理、剑走偏锋的行事风格和神乎其技的查体功底一览无遗.

从网盘说起,诊断国内云存储

- 圣斌 - Tech2IPO
了解了它的本质及要解决的问题才能明白它的发展方向. 提到云存储,很多人没有一个清晰的概念,要了解云存储的本质,那么我们首先要分析下目前市场上的不同类型的云存储:我们先从大家接触最多的云存储应用—–网盘 说起,网盘一般具备两个属性: 数据在云端+分享. 目前国内的网盘大概可以分为下面四类:. 1、目前国内的网盘都是 第一代“软件下载园”或是“资源下载站”的变形升级,注重 陌生人分享 (Unkown Share)或资源分享(Sources Share).