long start = System.currentTimeMillis(); JSONObject user = getToken(); String token = user.getString("token_type") + " " + user.getString("access_token"); JSONArray jsonArray = new JSONArray(); ExecutorService executorService = Executors.newFixedThreadPool(10); CompletionService<JSONObject> completionService = new ExecutorCompletionService<>(executorService); for (String id : ids) { Callable<JSONObject> callable = () -> { JSONObject json; String param = "id=" + id + "&userId=" + user.get("user_id"); json = JSON.parseObject(HttpUtils.doGet(getPlayUrl, param, token)); log.info("中台返回设备流地址url:{}", json.getJSONObject("data")); return json.getJSONObject("data"); }; completionService.submit(callable); } for (int i = 0; i < ids.size(); i++) { Future<JSONObject> future = completionService.take(); jsonArray.add(future.get()); } executorService.shutdown(); long end = System.currentTimeMillis(); log.info("同步中台2.0耗时:{}", (start - end)); return jsonArray;解释下代码
时间: 2024-04-27 22:20:29 浏览: 230
这段代码是一个 Java 方法,其功能是从中台获取多个设备的流地址,并返回一个包含所有设备流地址的 JSON 数组。具体来说,该方法首先使用 `System.currentTimeMillis()` 方法获取当前时间作为开始时间 `start`,然后调用 `getToken()` 方法获取用户的 token,拼接成请求中需要的格式。接下来,创建了一个空的 JSON 数组 `jsonArray`,以及一个线程池 `executorService` 和一个 `CompletionService` 对象 `completionService`,后者用于获取多个异步任务的返回结果。然后,使用 `for` 循环遍历传入的设备 ID 列表 `ids`,对于每个设备 ID,创建一个 `Callable` 对象并提交到 `completionService` 中,该对象会调用 `HttpUtils.doGet()` 方法向中台发送 GET 请求,获取该设备的流地址,并将结果封装成一个 JSON 对象返回。接下来,使用另一个 `for` 循环,遍历 `ids` 列表的长度次数,每次从 `completionService` 中获取一个已经完成的异步任务的结果,并将结果添加到 `jsonArray` 数组中。最后,关闭线程池 `executorService`,使用 `System.currentTimeMillis()` 方法获取当前时间作为结束时间 `end`,计算并输出同步中台2.0耗时。最后,返回 `jsonArray` 数组。
相关问题
long start = System.currentTimeMillis(); //程序执行前的时间戳 long end = System.currentTimeMillis(); //程序执行后的时间戳
long start = System.currentTimeMillis(); //程序执行前的时间戳
long end = System.currentTimeMillis(); //程序执行后的时间戳
上述代码用于获取程序执行前和执行后的时间戳。start变量存储了程序执行前的时间戳,而end变量存储了程序执行后的时间戳。
public void run() { long start = System.currentTimeMillis(); while (this.v > 0) { if (this.v > 0 && this.flow > 0) { this.v = this.v - this.flow; } System.out.println("线程" + Thread.currentThread().getName() + "剩余" + v); } long end = System.currentTimeMillis();
) { System.out.println("Thread " + Thread.currentThread().getName() + " is running: " + this.v); this.v--; } try { Thread.sleep(1000); } catch (InterruptedException e) { e.printStackTrace(); } } long end = System.currentTimeMillis(); System.out.println("Thread " + Thread.currentThread().getName() + " finished in " + (end - start) / 1000 + " seconds."); }
这段代码是一个线程的run()方法实现,它会不断地打印当前的计数器值,并每隔1秒钟将计数器减1,直到计数器为0。在线程执行完毕后,会记录线程的执行时间并输出。这段代码可以用于实现倒计时的功能,或者是类似任务执行的进度条等场景。
阅读全文