我的问题是,将“ 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上,它不会不会像我想的那样定期发生。
答案 0 :(得分:0)
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
中所述,它是用于多个线程之间的同步(为此也是低级的;通常,您可能希望使用{{1}中的较高级工具之一) })。
我宁愿使用java.util.concurrent
枚举以更人性化的单位来指定等待时间,而不是总是以毫秒为单位指定等待时间。
我为什么要把TimeUnit
放在这里?有关处理可能从休眠中抛出的Thread.currentThread().interrupt();
的正确方法,请阅读有关The Law of the Sabotaged Doorbell here的信息。内容丰富,寓教于乐。