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) 什么是线程? 线程是操作系统能够进行运算调度的最小单位,它被包含在进程之中,是进程中的实际运作单位.程序员可以通过它进行多处理 ...
随机推荐
- 2018-2019-2 网络对抗技术 20165318 Exp1 PC平台逆向破解
实验模块 (一)直接修改程序机器指令,改变程序执行流程: (二)通过构造输入参数,造成BOF攻击,改变程序执行流: (三)注入Shellcode并执行: 实验准备 设置共享文件夹(这一步我已经在之前安 ...
- php7 教程
标量类型声明 1. 分为强制模式和严格模式 2. 这些类型的函数参数可以执行声明 int, float, bool, string, interfaces, array, callable 例如: f ...
- 在Debian系中快速有效的安装oracle-java
jre8下载链接 https://www.oracle.com/technetwork/java/javase/downloads/jre8-downloads-2133155.html oracl ...
- 621. Task Scheduler
https://www.cnblogs.com/grandyang/p/7098764.html 将个数出现最多的那个字符作为分隔的标准,一定是最小的.所以这个时候只需要计算还需要添加多少个idel就 ...
- Mybatis学习总结(二)——Mapper代理开发
一.概要 1.原始DAO开发中存在的问题:(1)DAO实现方法体中存在很多过程性代码.(2)调用SqlSession的方法(select/insert/update)需要指定Statement的id, ...
- Android TextView的属性设置为textstyle="bold"时 中文的“¥”不显示
昨天在修改列表的时候出现了一个挺让人纠结的问题.在TextView中“¥”符号无论如何也显示不出来.尝试了使用气的特殊符号,都是能够正确显示的. 最后百度google了一圈也没找出个所以然来.于是觉得 ...
- Omi框架学习之旅 - 生命周期 及原理说明
生命周期 name avatars company constructor 构造函数 new的时候 install 初始化安装,这可以拿到用户传进的data进行处理 实例化 installed 安装完 ...
- postgrepsql 创建函数
-- 这里的CREATE OR REPLACE FUNCTION 为固定写法: "public"."function_info_a1" 这个为函数名 C ...
- Intellij实用技巧
快捷键 Tradition 快捷键 介绍 Ctrl + Z 撤销 Ctrl + Shift + Z 取消撤销 Ctrl + X 剪切 Ctrl + C 复制 Ctrl + S 保存 Tab 缩进 Sh ...
- Missing value auth-url required for auth plugin password
在控制台输入openstack相关命令时提示如下: openstack user list Missing value auth-url required for auth plugin passwo ...