带有RequestQue的while循环中的Thread.sleep()

时间:2016-12-31 16:41:07

标签: java multithreading thread-sleep request-queueing

我正在尝试做的是while循环延迟15秒并且在循环内部我想要执行齐射请求..循环正在工作但没有延迟

这是我的代码:(client2是凌空请求方法)

new Thread(new Runnable() {@Override
    public void run() {
        while (h < taxiidlist.size() && assined == false && requested == true) {
            handler2.post(new Runnable() {@Override
                public void run() {

                    client2(user.id, taxiidlist.get(h));

                    h++;
                }

            });
                try {
                    Thread.sleep(15000);
                } catch(InterruptedException e) {
                    e.printStackTrace();
                }

            }
        }
    }).start();

1 个答案:

答案 0 :(得分:1)

我不明白为什么代码不起作用。一个可能的问题可能是您忘记在传递内部Runnable实例的run()内调用handler.post()

尝试使用此示例代码(仅执行一次循环)并查看是否可以在您的问题中发现问题。

private static List<String> taxiidlist = new ArrayList<>();
static int h = 0;

public static void main(String[] args) {

    int id = 0;
    boolean assined = false;
    boolean requested = true;
    taxiidlist.add("One");

    new Thread(new Runnable() {
        @Override
        public void run() {
            while (h <= taxiidlist.size() && assined == false && requested == true) {
                post(new Runnable() {
                    @Override
                    public void run() {
                        client2(id, taxiidlist.get(h));
                        h++;

                        try {
                            Thread.sleep(1500);
                            System.out.println("slept!");
                        } catch (InterruptedException e) {
                            e.printStackTrace();
                        }
                    }
                });

                break;
            }
        }
    }).start();

}

static void post(Runnable runnable) {
    System.out.println("post!");
    runnable.run();

}

static void client2(int id, String s) {
    System.out.println("client2!");
}

希望这会有所帮助:)