Java 线程内 递归 Bug 一例
2016-03-28 16:56
459 查看
一个线程的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;
}
}
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之JDBC①
- java多线程之线程安全的单例模式
- Java clone详解
- JAVA 数组全排列
- Java第三次作业
- Java中并发编程的锁(不是synchronized)
- JDK源码之Collection
- 基数排序
- Java参数传递
- SpringMVC源码分析系列
- java日志
- Java排序算法——选择排序
- 有效处理Java异常三原则
- 5本最佳的Java面向对象理论和设计模式的书籍
- java.lang.UnsupportedClassVersionError: Bad version number in .class file
- java 的decorator 装饰模式
- Windows环境 安装Spring4.2.5源码
- java产生随机数
- Java排序算法——冒泡排序
- java基础知识学习笔记(一)