java - wait() 不会保存应用程序的进度
问题描述
我的问题是附加“val”的值传递给包含 wait() 调用的方法不会间隔发生。如果有人能真正解决这个问题,我将不胜感激。
我已经尝试过 handler.postDelay(){} 但这似乎也无济于事,如果我要求它等待一秒钟,它将停留五秒钟甚至更少,并附加我的 10 位数字值试图以间隔附加。例如,如果我有“123456”,它应该打印“1”,然后等待 1 秒,打印“2”,依此类推。
public void appendData(val){
logs.append(String.valueOf(val));
//This is what I'm using to start the waiting period
synchronized (this) {
try {
this.wait(1000);
} catch (Exception e) {
e.printStackTrace();
}
}
}
我无法弄清楚我所做的任何更改或制作,它总是不会等待,最后会附加整数,或者确切地说,整数会立即出现在我的 UI 上,它不会发生在我想要的间隔上。
解决方案
try {
System.out.print(1);
TimeUnit.SECONDS.sleep(1);
System.out.print(2);
TimeUnit.SECONDS.sleep(1);
System.out.print(3);
TimeUnit.SECONDS.sleep(1);
System.out.print(4);
TimeUnit.SECONDS.sleep(1);
System.out.print(5);
TimeUnit.SECONDS.sleep(1);
System.out.println(6);
} catch (InterruptedException e) {
Thread.currentThread().interrupt();
System.err.println(e);
}
正如评论wait
中所说,用于多个线程之间的同步(为此目的,它也是低级的;java.util.concurrent
例如,通常您会希望使用 中的高级工具之一)。
与其总是以毫秒为单位指定等待时间,我更喜欢使用TimeUnit
枚举以适合等待时间的更人性化的单位来指定它。
为什么我放在Thread.currentThread().interrupt();
那里?有关处理InterruptedException
可能从睡眠中抛出的正确方法,请阅读此处的“被破坏门铃法”。既有信息又有娱乐性。
推荐阅读
- python - 确定文件是“更可能”是 json 还是 csv
- javascript - 如何在 Flask 应用程序中使用 Polymer 元素作为静态资源?
- java - 我是否需要自动化扫描 QR 的应用程序,是否有 Appium 功能可以从 JAVA 发送特定的 QR?
- vue.js - 修复了 vue js 中带有动态内容的侧边栏
- linux - Linux Find 命令——根据文件名排除查找
- javascript - 如何动态重新加载部分文档
- r - 如何根据 TOOL 列中的不同值在 ITEM 上使用多个分隔符?
- apache-nifi - 将json文件拆分为多个流文件
- excel - Excel 正在引用我的文件的另一个版本。我怎样才能让它引用自己呢?
- python - Numpy 的结构化数组与 xarray(xray)有什么区别?