开发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是否遗漏的方法相关推荐

  1. 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) ...

  2. java web源代码_检测Java Web应用程序而无需修改其源代码

    java web源代码 与其他系统进行交互时,大多数Java Web应用程序都使用标准Java接口. 诸如Web页面或REST服务器之类的基于HTTP的服务是使用接口javax.servlet.Ser ...

  3. java 多线程 变慢_java多线程并发程序执行慢有什么原因?该怎么解决?

    我们在执行java多线程并发程序时有时候会碰到执行特别慢的场景,小伙伴们知道是什么原因导致的吗?它要怎么解决呢?下面小编就为你讲讲. 前提:在某地需要开发一个应用系统,此系统主要功能是能够让一些中小型 ...

  4. java简单的死锁检测(转载线下代码)

    一个简单的死锁检测功能. 1.探测出死锁 主要是:java.lang.management类的关于线程的系列方法 一个线程监控类 ThreadMXBean x=ManagementFactory.ge ...

  5. Java求今天是周几的程序代码

    方法一: public class The_day {public static void main(String[] args) {System.out.printf("%TA" ...

  6. java 素数 五行_c语言动态烟花小程序代码

    你应该用 点击详情.了解更多! 详情 史蒂芬孙 2018-12-19 00:54 0评论 0赞同 去网上搜索:C语言经典一百例 详情 多面体 2018-09-18 17:25 0评论 10赞同 我们开 ...

  7. 检测java内存泄露_MAT 检测 Java内存泄露检测

    一.Java内存泄露例子 Vector v = new Vector( 10 ); for ( int i = 1 ;i < 100 ; i ++ ){ Object obj = new Obj ...

  8. 音乐系统java web_一种基于Java⁃Web的音乐管理系统设计

    摘 要: 采用Java⁃Web技术结合音乐管理网站的市场需求设计了一种音乐管理系统.该系统采用Oracle数据库存储数据信息,设计界面美观,具有音乐动态管理和定时响应功能,克服了传统网站操作复杂.收听 ...

  9. java中有几种内部类,Java中的四种内部类

    四种内部类 在Java 中,可以将一个类定义在另一个类里面或者一个方法里面,这样的类称为内部类.广泛意义上的 内部类一般来说包括这四种:静态内部类.匿名内部类.成员内部类和局部内部类,下面我们一一介绍 ...

最新文章

  1. Android2.2 API 中文文档系列(6) —— ImageView
  2. AndroidStudio中调试时一直显示waiting for debugger
  3. 对list字段属性的部分修改的application
  4. java面试题三十一
  5. 如何通过 HttpWebRequest 上传文件?
  6. java组件自适应窗口大小_java swing 窗口和控件自适应大小
  7. 很多人创业是为了自由
  8. 算法高级(22)-BCrypt加密算法,号称目前最安全的算法之一
  9. zktime 协议_Zktime8.0安装使用说明及常见故障分析
  10. 声纹、语音识别入门书籍推荐
  11. Win10桌面壁纸、锁屏壁纸保存位置
  12. 囚徒困境(条件判断)
  13. privot函数使用
  14. 为什么团队分工越明确,工作效率越低?
  15. linux iis安装教程,易企秀源码在linux、win主机下的安装教程和详细步骤(含伪静态设置)...
  16. [usOJ5528]小奇的旅行计划
  17. vue2.9.6版本下创建vue-cli脚手架
  18. python图片压缩pako_前端pako.js的 解压, json 转excel文件 下载
  19. 基于javaweb+jsp的敬老院养老院管理系统(JavaWeb JSP MySQL Servlet SSM SpringBoot Bootstrap Ajax)
  20. Unity 事件管理中心

热门文章

  1. 【渝粤教育】广东开放大学 动画概论 形成性考核 (44)
  2. 物联网应用:蓝牙模块在智能门锁中的应用
  3. StevenBoyd--Convex optimization--0. Contents-catalog
  4. python求一组数的最大值_python快速求一个数组的最大值/最小值及其索引
  5. 点击事件为什么会失效_Spring事务原理?事务在方法间如何传播?为什么会失效?...
  6. oracle sql条件语句,谁能介绍下Oraclesql之条件语句?
  7. php 高级搜索下拉框,高级搜索页面advancedsearch.php调用自定义字段
  8. CDMA系统的三种码
  9. 最简单的语言来说JAVA中的NEW到底怎么搞
  10. jquery部分方法