• 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;
    }
    }

  • 相关阅读:
    #cat ora11g_ora_.trc
    Vue学习之路3-浅析Vue-cli搭建项目后的目录结构
    Vue学习之路2-项目初搭建
    Vue学习之路1-集成环境安装
    laravel中建立公共视图的方法
    Windows下Laravel5.5 的 Homestead 开发环境部署
    技术好文推荐
    中文文案排版指北
    消息队列的使用
    Laravel 验证中文本地化
  • 原文地址:https://www.cnblogs.com/rgqancy/p/5329689.html
Copyright © 2020-2023  润新知