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);

}

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/news/356075.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

Marin说PCB之 PCB封装和原理图封装的藕断丝连--续集(2)

最近天气越来越冷了,小编我在上海漂泊的十多年了,感觉今年似乎是最冷的一年啊。家里的秋裤都不管用了,要换成大棉裤和军大衣啊。而且现在羽绒服大部分都很贵,动不动上千元了,都赶得上小编我几个月的私房钱了都&#xf…

调整线程池的重要性

无论您是否知道,您的Java Web应用程序很可能都使用线程池来处理传入的请求。 这是许多人忽略的实现细节,但是迟早您需要了解如何使用该池以及如何为您的应用程序正确调整池。 本文旨在说明线程模型,什么是线程池以及正确配置线程池所需执行的…

在线原理图绘制网站推荐

如今专业EDA软件已经基本在硬件公司普及并正版化,优秀的EDA工具包括 Cadence公司的OrCAD、Allegro软件,Mentor Graphics的PADS, Altium公司的Altium Designer等等,但是它们在功能异常强大的同时也在一些时候显得非常复杂&#xff…

java map与set的区别_java 集合(list,set,map)三者之间的关系和区别

原java 集合(list,set,map)三者之间的关系和区别一:先上一张关系图,让大家看的更明白。备注:其中红色部分为实现,其他地方均为接口。二:各自的特点。List 有序,可重复ArrayList优点: 底层数据结…

数据竞赛利器 —— xgboost 学习清单

1. 入门大全 xgboost 作者给出的一份完备的使用 xgboost 进行数据分析的完整示例代码:A walk through python example for UCI Mushroom dataset is provided.2. 参数调优 Complete Guide to Parameter Tuning in XGBoost (with codes in Python)转载于:https://www…

adf时间作用域_ADF任务流:页面片段的托管bean作用域

adf时间作用域介绍 当我们使用ADF任务流并需要实现一些特定于流的业务逻辑或存储一些与流相关的信息时,我们通常使用pageFlowScope托管bean。 而且,当我们需要为流的活动(页面或页面片段)提供服务时,我们会为此类托管b…

java接口抽象方法_Java 接口 抽象类 抽象方法

abstract class elehousekeeping { //抽象家用电器类abstract void opermode(); //抽象方法}class TV extends elehousekeeping { //电视机public void opermode() {System.out.println("13:12 TV is working.");}}class aircondition extends elehousekeeping { //空…

IMA文件如何打开,winimage使用方

一般先用UltraISO打开一个系统的镜像文件(.iso)。其中有些文件(尤其是.ima,img)比如下面雨林木风Ghost系统盘的这个IMA文件,我们先提取到桌面 用WinImage打开这个文件即可发现这个IMA文件整合了很多东西。所以&#x…

Java的几何布朗运动

Wiener过程是连续时间随机过程,以纪念Norbert Wiener命名。 通常用于用随机成分表示噪音或财务状况。 可以计算几何布朗运动以可视化某些界限(以分位数表示)以暗示绝对范围。 为了进行计算,需要以下参数: &#xff0…

上传图片,多图上传,预览功能,js原生无依赖

最近很好奇前端的文件上传功能,因为公司要求做一个支持图片预览的图片上传插件,所以自己搜了很多相关的插件,虽然功能很多,但有些地方不能根据公司的想法去修改,而且需要依赖jQuery或Bootstrap库,所以我就想…

mongodb java id 查询数据_java 用 _id 查找 MongoDB 下的数据

找网上的资料看了下增删改查,等日后补上。已经实现了数据的插入,现在想通过 _id属性来查找数据。一开始看到 类似 55b321df715cc162076eb466 这么一长串的内容觉得是string类型。但是发现并不能搜索到结果,在网上搜到了解决方案:S…

js中的面向对象入门

http://www.cnblogs.com/chenmeng0818/p/6508755.html 什么是对象 我们先来看高程三中是如何对对象进行定义的 "无序属性的集合,其属性可以包括基本值、对象或者函数",对象是一组没有特定顺序的的值。对象的没个属性或方法都有一个俄名字&…

maven 父maven_Maven不会吮吸。 。 。 但是Maven文件会

maven 父maven我不会参加整个Maven辩论,但可以说我是所有最佳实践的坚定支持者,对我而言,Maven是最佳实践的体现。 我的意思是说,Maven是围绕特定的最佳实践构建方法构建的。 注意,我说了一种特定的最佳实践构建方法。…

java maven部署_eclipse中maven项目部署到tomcat

下面就一一介绍这几种部署方式:1.打war包到tomcat/webapps目录这种方式其实跟非maven项目没什么区别,就是打包的方式不同之后在target目录下会生成war包,复制到tomcat/webapps目录即完成部署。2.使用tomcat-maven插件,在pom.xml的…

word 论文排版 —— 按指定格式章节的自动编号

在word中如何实现章节标题自动编号 标题样式与标题的编号是两个步骤,为标题建立编号是在为标题样式确定的基础后进行的。这是显而易见的,也即只有先定义了多级标题(也可使用 word 自带的标题样式),才可为这些多级标题自…

vb 获取mysql表第一行数据_vb如何将远程获取的数据插入本机数据表中

双击按钮添加如下代码Private Sub Command1_Click()Dim objRemoteConn As New ADODB.ConnectionDim objLocalConn As New ADODB.ConnectionDim objRs As ADODB.RecordsetDim strSql As StringobjRemoteConn.Open "providerSQLOLE…

ASP渲染下拉框使时间依次减少

<% xyear(now()) yyear(now())-1 Do While y>2002%><li><a href"#2015" class"treeview-time"><%y%></a></li><% yy-1 loop%>转载于:https://www.cnblogs.com/mazey/p/6512893.html

Spring Cloud对Hystrix的支持

Spring Cloud项目为Netflix OSS Hystrix库提供了全面的支持。 之前我已经写过有关如何使用原始Hystrix库包装远程调用的文章。 在这里&#xff0c;我将探讨如何将Hystrix与Spring Cloud结合使用 基本 实际上并没有什么大不了的&#xff0c;这些概念仅在特定于Spring引导的增强…

OA系统部署短信过程

安装dotNetFx40_Client_setup.exe插件 安装mysql_installer_community_V5.6.21.1_setup.1415604646.msi数据库 根据数据库版本安装相应驱动&#xff08;64位或者32位系统&#xff09; 安装mysql-connector-odbc-5.3.7-winx64.msi驱动&#xff08;ODBC&#xff09;工具 安装mysq…

centos6配置mysql5.7_CentOS 6/7 下 MySQL 5.7 安装部署与配置

一、前言1、本教程主要内容MySQL 5.7安装(yum)MySQL 5.7 ROOT账号密码修改MySQL 5.7基础使用与配置MySQL shell管理常用语法示例(用户、权限等)MySQL字符编码配置2、本教程环境信息与适用范围环境信息软件版本CentOS7.4 ReleaseMySQL5.7适用范围软件版本CentOSCentOS 6 & C…