shl*_*hen 7 java multithreading android
我在我的主类中运行了一个单独的线程.它需要每100毫秒发送一条消息,但每100毫秒一次.我想知道它是否足够准确可以这样使用,或者是否有替代方案可以让某些事情恰好每秒发生10次.
class ClockRun implements Runnable {
@Override
public void run() {
double hourlyRate = Double.parseDouble(prefs.getString("hourlyRate", ""));
double elapsedTime = 0;
do {
while(clockRun){
double amount = hourlyRate / 360 /100 * elapsedTime;
elapsedTime++;
Bundle clockData = new Bundle();
clockData.putString("value", String.format("$%.2f", amount));
Message message = Message.obtain();
message.setData(clockData);
handler.sendMessage(message);
try {
Thread.sleep(100);
} catch (InterruptedException e) {
e.printStackTrace();
}
}
}while (mainRun);
Notify.viaToast(getApplication(), "Thread stopped.");
}
}
Run Code Online (Sandbox Code Playgroud)
不,它根本不准确,
来自文档:
(暂时停止执行)指定的毫秒数,具体取决于系统定时器和调度程序的精度和准确性. 换句话说,这种睡眠是OS或环境依赖的,你无法预测OS调度决策,另外,睡眠可以通过中断终止.
再次来自文档:
在任何情况下,您都不能假设调用sleep会在指定的时间段内暂停该线程
此外,它效率不高,因为你只是为了睡觉而浪费CPU周期.
ScheduledExecutorService将提供更好的精度和性能.只需将您的任务包装在Callable或Runnable中并用于ScheduledExecutorService执行它们,那里有很多教程.
| 归档时间: |
|
| 查看次数: |
799 次 |
| 最近记录: |