同步线程未实现睡眠

对方正在输入... 测试交流1 166字数 380阅读1分16秒阅读模式
摘要我在一些API测试中遇到了竞争条件,我想在调用创建端点后检查是否存在用户。 我创建了一个类来检查有效数据是否。。。

我在一些API测试中遇到了竞争条件,我想在调用创建端点后检查是否存在用户。
我创建了一个类,用于检查是否返回了有效数据,如果没有返回,则最多可以在本地运行四次,但我注意到,当它在管道中运行时,它不会执行线程。睡眠命令。

创建类以绕过比赛条件文章源自玩技e族-https://www.playezu.com/179129.html

  public static Object commonExistenceQuery(Object endpoint) throws InterruptedException {
        int Counter = 0;
        Object ID = "";
        Object falseCheck = "false";
        synchronized (ID) {
            System.out.println("attempting to obtain Id for endpoint");
            ID = endpoint;
            while (ID == falseCheck) {
                Thread.sleep(1000);
                ID = endpoint;
                Counter++;
                System.out.println("Id not yet obtained, retrying attempt " + Counter + " of 4");
                if (Counter == 4|| ID != falseCheck) {
                    break;
                }
            }
            if (Counter == 4) {
                throw new ArithmeticException("ID was never obtained for endpoint, ensure successfully created");
            }
            else {
                System.out.println("successfully called endpoint and returned a valid ID of " + endpoint);
                return ID;
            }
        }
    }

查找用户的类(在ID=端点中调用)文章源自玩技e族-https://www.playezu.com/179129.html

    public Object findUser(Object name) throws IOException {
        JSONObject failure = new JSONObject();
        failure.put("check","false");
        Map request = new HashMap();
        Map body = new HashMap();
        body.put("name", name);
        body.put("business", "claims");
        body.put("unit", 10);
        request.put("body", body);
        request.put("callback", "true");
        Map findUser = run(userEndpoint.find, request,false);
        JSONObject jsonObject = new JSONObject(findUser);
        JSONObject getId = jsonObject.getJSONObject("data");
        if (getId == null){
            getId = failure;
            // we need to convert the null to a json object in the result of a failure, to avoid a null pointer exception
            System.out.println("failure to locate user ID, returning ID of "+getId.get("check"));
            return getId.get("check");
        }
        else
        {
            return getId.get("id");
        }
    }

你知道为什么要用线吗。sleep(1000)可能不起作用,或者欢迎改进代码的方法文章源自玩技e族-https://www.playezu.com/179129.html 文章源自玩技e族-https://www.playezu.com/179129.html

 
    • rzwitserloot
      rzwitserloot 9

      这里有多个重大错误。你的代码基本上是一个奇怪的骰子。

      String ID = “&引用;;
      synchronized (ID) {

      您在上同步 对象不 变量. 那么,你是在问 “&引用; 对象来持有锁。哪一个“有效”,但很疯狂-不要锁定字符串。您需要创建一个锁对象,并对所有要“选通”的同步块使用相同的对象,以便只有一个线程可以运行。换句话说, 同步(x){CODE} 意味着该线程将等待,直到它可以获得 x 变量点位于。如果它没有被任何其他东西锁定,它将获得锁并运行。否则,它会一直等到空闲。

      Object 假 = "false";

      这究竟是什么?Java有布尔值。而且 假 是个疯狂的名字。

      ID == 假

      == 在两个对象之间进行引用标识检查,这不是您想要的,您想要的是相等检查;那就是 ID.equals(假). 这并不重要,这显然需要 布尔型 东西

      你知道为什么要用线吗。睡眠(1000)可能不起作用

      你的代码不起作用,你在这里做了各种疯狂的事情,但你还没有测试,你的第一直觉是:“;必须以某种方式破坏这一记录良好的核心库函数;。您应该假设库函数没有被破坏,并且精确地执行文档中所述的操作。如果你认为它们不起作用,你99.9999%的时间是错的;是你的代码被破坏了。

      JSONObject

      糟糕的API;不要用那个。杰克逊或格森。

    匿名

    发表评论

    匿名网友
    确定

    拖动滑块以完成验证