java holdslock_一种检测Java并发程序代码分支路径lock是否遗漏的方法
开发java程序中,程序员往往会用synchronized lock 进行临界资源保护和线程同步;android平台上,提供了一些技巧来减少锁被错误使用:使用Locked后缀作为函数名字:Locked函数被调用,需调用方(或者更上层调用方)持锁; 而此函数内部不能持有lock;通过这种编程约定的方式,可以减少死锁和程序员加lock不全的场景。
由于程序员水平和程序本身的复杂性,仍旧存在一些代码路径忘记添加synchronized lock,导致一些低概率的并发问题。为了提早发现和定位这种问题,我们可以采用lock guard的方式进行检测。主要思想是:在需要lock保护的代码位置,增加是否已经持有需要lock的判断,如果该位置没有持有需要的lock,则证明存在错误。
实现方法1:
本身java Thread已经提供了如下方法,我们可以使用;Thread.holdsLock进行判断;此方法优点是现成可用的,不需要我们开发太多的东西
简单举例:
private void updatePowerStateLocked(){
if (!mSystemReady || mDirty == 0) {
return;
}
if (!Thread.holdsLock(mLock)) {
Slog.wtf(TAG, "Power manager lock was not held when calling updatePowerStateLocked");
}
实现方法2:
在每个函数的头部,增加一个java关键字或者在所有java对象的基类里面,例如GUARDED_BY(mLock)或者lock_guarded_by(Object obj)
private void updatePowerStateLocked() GUARDED_BY(mLock) {
或者:
private void updatePowerStateLocked() {
lock_guarded_by(Object obj);
}
第一种需要修改toolchain;第二种相比简单些,以后研究一下;现在可以自己简单实现一个函数,方法1
boolean lock_guarded_by(Object obj) {
return Thread.holdsLock(mLock);
}
java holdslock_一种检测Java并发程序代码分支路径lock是否遗漏的方法相关推荐
- Fork and Join: Java也可以轻松地编写并发程序 原文地址 作者:Julien Ponge 译者:iDestiny 资源下载: Java SE 7 Sample Code(Zi
Fork and Join: Java也可以轻松地编写并发程序 原文地址 作者:Julien Ponge 译者:iDestiny 资源下载: Java SE 7 Sample Code(Zip) ...
- java web源代码_检测Java Web应用程序而无需修改其源代码
java web源代码 与其他系统进行交互时,大多数Java Web应用程序都使用标准Java接口. 诸如Web页面或REST服务器之类的基于HTTP的服务是使用接口javax.servlet.Ser ...
- java 多线程 变慢_java多线程并发程序执行慢有什么原因?该怎么解决?
我们在执行java多线程并发程序时有时候会碰到执行特别慢的场景,小伙伴们知道是什么原因导致的吗?它要怎么解决呢?下面小编就为你讲讲. 前提:在某地需要开发一个应用系统,此系统主要功能是能够让一些中小型 ...
- java简单的死锁检测(转载线下代码)
一个简单的死锁检测功能. 1.探测出死锁 主要是:java.lang.management类的关于线程的系列方法 一个线程监控类 ThreadMXBean x=ManagementFactory.ge ...
- Java求今天是周几的程序代码
方法一: public class The_day {public static void main(String[] args) {System.out.printf("%TA" ...
- java 素数 五行_c语言动态烟花小程序代码
你应该用 点击详情.了解更多! 详情 史蒂芬孙 2018-12-19 00:54 0评论 0赞同 去网上搜索:C语言经典一百例 详情 多面体 2018-09-18 17:25 0评论 10赞同 我们开 ...
- 检测java内存泄露_MAT 检测 Java内存泄露检测
一.Java内存泄露例子 Vector v = new Vector( 10 ); for ( int i = 1 ;i < 100 ; i ++ ){ Object obj = new Obj ...
- 音乐系统java web_一种基于Java⁃Web的音乐管理系统设计
摘 要: 采用Java⁃Web技术结合音乐管理网站的市场需求设计了一种音乐管理系统.该系统采用Oracle数据库存储数据信息,设计界面美观,具有音乐动态管理和定时响应功能,克服了传统网站操作复杂.收听 ...
- java中有几种内部类,Java中的四种内部类
四种内部类 在Java 中,可以将一个类定义在另一个类里面或者一个方法里面,这样的类称为内部类.广泛意义上的 内部类一般来说包括这四种:静态内部类.匿名内部类.成员内部类和局部内部类,下面我们一一介绍 ...
最新文章
- Android2.2 API 中文文档系列(6) —— ImageView
- AndroidStudio中调试时一直显示waiting for debugger
- 对list字段属性的部分修改的application
- java面试题三十一
- 如何通过 HttpWebRequest 上传文件?
- java组件自适应窗口大小_java swing 窗口和控件自适应大小
- 很多人创业是为了自由
- 算法高级(22)-BCrypt加密算法,号称目前最安全的算法之一
- zktime 协议_Zktime8.0安装使用说明及常见故障分析
- 声纹、语音识别入门书籍推荐
- Win10桌面壁纸、锁屏壁纸保存位置
- 囚徒困境(条件判断)
- privot函数使用
- 为什么团队分工越明确,工作效率越低?
- linux iis安装教程,易企秀源码在linux、win主机下的安装教程和详细步骤(含伪静态设置)...
- [usOJ5528]小奇的旅行计划
- vue2.9.6版本下创建vue-cli脚手架
- python图片压缩pako_前端pako.js的 解压, json 转excel文件 下载
- 基于javaweb+jsp的敬老院养老院管理系统(JavaWeb JSP MySQL Servlet SSM SpringBoot Bootstrap Ajax)
- Unity 事件管理中心
热门文章
- 【渝粤教育】广东开放大学 动画概论 形成性考核 (44)
- 物联网应用:蓝牙模块在智能门锁中的应用
- StevenBoyd--Convex optimization--0. Contents-catalog
- python求一组数的最大值_python快速求一个数组的最大值/最小值及其索引
- 点击事件为什么会失效_Spring事务原理?事务在方法间如何传播?为什么会失效?...
- oracle sql条件语句,谁能介绍下Oraclesql之条件语句?
- php 高级搜索下拉框,高级搜索页面advancedsearch.php调用自定义字段
- CDMA系统的三种码
- 最简单的语言来说JAVA中的NEW到底怎么搞
- jquery部分方法