听到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
原创文章转载请注明出处:
http://it.deepinmind.com
英文原文链接
分享到:
相关推荐
测试多并发的性能及同步
object_threadsafe:我们将任何对象的线程安全性和std :: shared_mutex的速度提高10倍,以实现读取率> 85%的无锁算法的速度
解决webrtc Thread::Clear崩溃的patch包,之前的老版本webrtc都会有Thread::Clear()多线程冲突的bug,根据这个补丁包,修改对应的源码,可以解决这个bug,亲测~~
VC11 x86 Thread Safe (2014-May-28 19:57:18) Zip [18.56MB] sha1: 67d90888d7ae37029452d9b2e1135d9e3a087bd3 转自:http://windows.php.net/download/
线程安全该项目包含几个关于如何创建线程安全类的示例。 如果您有兴趣了解更多关于 Java 和编程的知识,请随时关注我的博客:
window下php5.5 Thread Safe (TS) x86 的mongo扩展 1.下载完你需要的二进制包后,解压压缩包,将'php_mongo.dll'文件添加到你的PHP扩展目录中(ext)。ext目录通常在PHP安装目录下的ext目录。 2.打开php配置文件 ...
PHP 5.3 5.3 Non Thread Safe (NTS) x86 APC加速器 重命名为php_apc.dll 2.复制php_apc.dll到你的PHP的模块文件夹里,比如c:/php/extensions (PHP4.X)或者c:/php/ext(PHP5.X) 3.打开php.ini.搜索;extension=...
thread_safe.rar
本文的主题是关于具有java语言风格的Thread、synchronized、volatile,以及J2SE5中新增的概念,如锁(Lock)、原子性(Atomics)、并发集合类、线程协作摘要、Executors。开发者通过这些基础的接口可以构建高并发、线程...
php-7.2.3-Win32-VC15-x86 Thread Safe 官网下载的,单独PHP
ThreadSafe 用于多线程,C#代码开发。
java并发编程源码分析
通过python与ffmpeg结合使用,可生成进行视频点播、...[thread counts]:并发线程数 [interval Time]:启动每个线程的间隔时间 代码: #!/usr/bin/python # -*- coding: utf-8 -*- ''' Created on 2015年7月22日 @au
SwiftConcurrentCollections介绍Swift并发集合(或SCC )是一个库,提供一些默认Swift集合的并发(线程安全)实现。 与Java的java.util.concurrent发现的类似。安装迦太基在您的Xcode项目文件夹中执行以下操作: ...
对于使用apache服务器的用户请下载vc6版本的php
Java 模拟线程并发 Java, 模拟线程并发,线程,并发 Java, 模拟线程并发,线程,并发 Java, 模拟线程并发,线程,并发 Java, 模拟线程并发,线程,并发
代码实现了一个精细化加锁的链表,欢迎研究高并发变成的朋友参考
重命名为php_apc.dll ...apc.enabled = 1 apc.shm_segments = 1 apc.shm_size = 64 apc.optimization = 0 apc.num_files_hint = 1000 apc.ttl = 0 apc.gc_ttl = 3600 apc.cache_by_default = On ...
老钱《打通Java任督二脉--并发数据结构的基石》 HongJie《一行一行源码分析清除AbstractQueuedSynchronizer》 爱吃鱼的KK 《AbstractQueuedSynchronizer源码分析(基于Java8)》 waterstone《Java并发AQS详解》 英文...
并发多线程从简到全 参考: 目录: [TOC] 相关文档: kwseeker/netty Executors线程池.md 1 基本概念 1.1 CPU与线程的关系 1.2 线程与进程的区别和关系 1.3 吞吐量 1.4 线程安全 1.5 线程声明周期 1.6 守护线程 1.7 ...