zoukankan      html  css  js  c++  java
  • 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;
    }
    }

  • 相关阅读:
    设计模式中的多态——策略模式详解
    Spring IOC容器启动流程源码解析(一)——容器概念详解及源码初探
    并发包下常见的同步工具类详解(CountDownLatch,CyclicBarrier,Semaphore)
    HNOI2020游记
    旧年之末,新年伊始
    退役V次后做题记录
    PKUWC2020 游记
    CSP2019退役记
    CTS/APIO2019游记
    HNOI2019游记
  • 原文地址:https://www.cnblogs.com/rgqancy/p/5329689.html
Copyright © 2011-2022 走看看