【发布时间】:2016-10-09 11:56:02
【问题描述】:
假设我有一个nametag,它是 GUI 程序中的 UI 组件。
nametag 将根据数据不断更改其文本。
如果用户更改了他/她的姓名数据,那么他/她将在nametag 中看到更改。
对于这个任务,我的代码如下所示:
Thread thread = new Thread(new Runnable() {
@Override
public void run() {
while (true) {
String name = data.getName();
nametag.setText(name);
try {
Thread.sleep(100);
} catch (InterruptedException e) {
e.printStackTrace();
}
}
}
});
由于0.1s 的反应时间对人们来说似乎是即时的,所以我添加了Thread.sleep(100) 以供电脑休息。
但是,我不确定这是否有助于计算机在能源使用方面或其他方面。在这种情况下睡眠方法是否完全浪费时间?一点好处都没有?
【问题讨论】:
-
几个 cmets:首先,我希望你实现某种 listener,只要名称标签中有 change 就会调用它,而不仅仅是不断更新,即使可能没有变化。其次,调用
Thread.sleep仅仅意味着当前调用线程让步给任何其他线程。如果有另一个线程在等待,那么它不一定会节省任何 CPU 时间。 -
如果这是一个 GUI 程序,你可能需要使用一些特殊的措施来从后台线程更新 UI 组件。
-
@TimBiegeleisen:
Thread.sleep将释放 CPU 至少指定的数量,即使没有其他线程想要做任何事情。因此,与“忙循环”相比,它确实节省了 CPU。 -
当然可以节省 CPU 时间。
-
@eldo 也许其他人不知道?不过感谢您的意见。
标签: java multithreading listener sleep