Java 线程内 递归 Bug 一例
一个线程的run方法里使用递归方法,出了Bug。
private boolean ispass(String creationId){
List<Map> maps =creationService.getCreationById(creationId);
if(maps != null && maps.size()>0){
Map m = maps.get(0);
String state= (String) m.get("STATE");
if(state != null && state.equals("0")){
return true;
}else{
try {
if(falg == 10){
return false;
}
Thread.sleep(1000 * 60);
falg++;
} catch (InterruptedException e) {
// TODO Auto-generated catch block
e.printStackTrace();
return false;
}
ispass(creationId);
}
}else{
return false;
}
return false;
}
同事的解决办法,修改代码通过抛出异常的方式,也算解决了。当然了我不认可 。:)
private boolean ispass(String creationId) throws SecussException{
List<Map> maps =creationService.getCreationById(creationId);
if(maps != null && maps.size()>0){
Map m = maps.get(0);
String state= (String) m.get("STATE");
if(state != null && state.equals("0")){
throw new SecussException("ok");
}else{
try {
if(falg == 10){
return false;
}
Thread.sleep(1000 * 60);
falg++;
} catch (InterruptedException e) {
// TODO Auto-generated catch block
e.printStackTrace();
return false;
}
ispass(creationId);
}
}else{
return false;
}
return false;
}
我的解决办法:调试代码,发现问题根源,该返回的地方,没返回;不该返回的地方,返回了错误的值。
private boolean ispass(String creationId){
List<Map> maps =creationService.getCreationById(creationId);
if(maps != null && maps.size()>0){
Map m = maps.get(0);
String state= (String) m.get("STATE");
if(state != null && state.equals("0")){
return true;
}else{
try {
if(falg == 10){
return false;
}
Thread.sleep(1000 * 60);
falg++;
} catch (InterruptedException e) {
// TODO Auto-generated catch block
e.printStackTrace();
return false;
}
return ispass(creationId);
}
}else{
return false;
}
}
Java 线程内 递归 Bug 一例的更多相关文章
- Java 线程内异常处理
Thread的run方法是不抛出任何检查型异常(checked exception)的,但是它自身却可能因为一个异常而被终止,导致这个线程的终结.最麻烦的是,在线程中抛出的异常即使使用try...ca ...
- MVC 创建线程内的db单例
using System; using System.Collections.Generic; using System.Linq; using System.Web; using LSUnion.S ...
- Java使用线程池递归压缩文件夹下面的所有子文件
本文将介绍Java中利用线程池递归的方式压缩文件夹下面的所有子文件,具体方法如下: Gzip单个文件压缩 对于单个文件使用GZip压缩. package date0805.demo1; import ...
- java 线程、线程池基本应用演示样例代码回想
java 线程.线程池基本应用演示样例代码回想 package org.rui.thread; /** * 定义任务 * * @author lenovo * */ public class Lift ...
- java 线程 原子类相关操作演示样例 thinking in java4 文件夹21.3.4
java 线程 原子类相关操作演示样例 package org.rui.thread.volatiles; import java.util.Timer; import java.util.Time ...
- Java线程演示样例 - 继承Thread类和实现Runnable接口
进程(Process)和线程(Thread)是程序执行的两个基本单元. Java并发编程很多其它的是和线程相关. 进程 进程是一个独立的执行单元,可将其视为一个程序或应用.然而,一个程序内部同事还包括 ...
- 【转载】 Java线程面试题 Top 50
Java线程面试题 Top 50 不管你是新程序员还是老手,你一定在面试中遇到过有关线程的问题.Java语言一个重要的特点就是内置了对并发的支持,让Java大受企业和程序员 的欢迎.大多数待遇丰厚的J ...
- Java线程面试题 Top 50 (转载)
转载自:http://www.cnblogs.com/dolphin0520/p/3958019.html 原文链接:http://www.importnew.com/12773.html 本文由 ...
- 50 道 Java 线程面试题(转载自牛客网)
下面是 Java 线程相关的热门面试题,你可以用它来好好准备面试. 1) 什么是线程? 线程是操作系统能够进行运算调度的最小单位,它被包含在进程之中,是进程中的实际运作单位.程序员可以通过它进行多处理 ...
随机推荐
- 月球美容计划之最小生成树(MST)
寒假学的两个算法,普里姆,克鲁斯卡尔最终弄明确了.能够发总结了 先说说普里姆,它的本质就是贪心.先从随意一个点開始,找到最短边,然后不断更新更新len数组,然后再选取最短边并标记经过的点,直到全部的点 ...
- maven 打包生成doc和源码插件
<!--配置生成Javadoc包--> <plugin> <groupId>org.apache.maven.plugins</groupId> < ...
- solidity数据位置-memory,storage和calldata
有三种类型,memory,storage和calldata,一般只有外部函数的参数(不包括返回参数)被强制指定为calldata.这种数据位置是只读的,不会持久化到区块链 storage存储或memo ...
- P2-Centos中安装vsftpd
1. 卸载已有版本 yum remove vsftpd 2. 安装 yum install -y vsftpd 3. 创建文件服务器根目录 mkdir /ftpfile 4. 创建ftp服务器用户 u ...
- easyui的datagrid的列checkbox自定义增加disabled选项
需求根据权限判断datagrid的每一列的checkBox是否可选,看了下文档,发现editor的checkbox应该能实现这个功能,但我们项目自己将easyui外面包了一层,把原生的editor改成 ...
- VS2013开发上位机并调用MSCcommm控件的方式
此文章适合VC++串口通信入门 一.页面布局及添加控件 1, 安装好vs2010如图 2, 新建一个基于VC++的MFC项目comm 注意:点击ok,然后next,这时候要将application t ...
- odoo学习之弹框显示
按条件隐藏: <xpath expr="//group[1]" position="attributes"> <attribute name= ...
- pycharm shortcut
Alt+F12 is a shortcut to open/hide Terminal panel
- 阿里云telnet 3306端口失败
在阿里云的服务器上安装了MySQL, 然后远程访问总是不通. 查询了很久,排查思路如下: 检查mysql是否启动 检查本机3306端口是否处于监听状态 检查阿里云控制台是否开启了安全限制 检查mysq ...
- vue-cli 3.0 路由懒加载
当打包构建应用时,Javascript 包会变得非常大,影响页面加载.如果我们能把不同路由对应的组件分割成不同的代码块,然后当路由被访问的时候才加载对应组件,这样就更加高效了. 1. 安装 synta ...