在Java中我们处理线程同步问题时,处理延迟可能会使用Thread类的sleep方法,这里抛开concurrent类的一些方法,其实 Android平台还提供了一个SystemClock.sleep方法,它们有什么区别呢?
我们每次调用Thread.sleep时可能会出现InterruptedException异常,而SystemClock.sleep方法则不会,在 SDK上有这样的描述,它将会忽略中断异常。
Three different clocks are available, and they should not be confused:
-
System.currentTimeMillis()
is the standard "wall" clock (time and date) expressing milliseconds since the epoch. The wall clock can be set by the user or the phone network (see setCurrentTimeMillis(long)
), so the time may jump backwards or forwards unpredictably. This clock should only be used when correspondence with real-world dates and times is important, such as in a calendar or alarm clock application. Interval or elapsed time measurements should use a different clock. If you are using System.currentTimeMillis(), consider listening to the ACTION_TIME_TICK
, ACTION_TIME_CHANGED
and ACTION_TIMEZONE_CHANGED
Intent
broadcasts to find out when the time changes.
-
uptimeMillis()
is counted in milliseconds since the system was booted. This clock stops when the system enters deep sleep (CPU off, display dark, device waiting for external input), but is not affected by clock scaling, idle, or other power saving mechanisms. This is the basis for most interval timing such as Thread.sleep(millls)
, Object.wait(millis)
, and System.nanoTime()
. This clock is guaranteed to be monotonic, and is the recommended basis for the general purpose interval timing of user interface events, performance measurements, and anything else that does not need to measure elapsed time during device sleep. Most methods that accept a timestamp value expect the uptimeMillis()
clock.
-
elapsedRealtime()
is counted in milliseconds since the system was booted, including deep sleep. This clock should be used when measuring time intervals that may span periods of system sleep.
There are several mechanisms for controlling the timing of events:
分享到:
相关推荐
1. **日期和时间处理**:在C#中,`System.DateTime`类是处理日期和时间的基础。这个类提供了获取和设置日期、时间、小时、分钟、秒等属性的方法。例如,`DateTime.Now`可以获取当前系统时间,而`DateTime.Today`则只...
Thread.sleep(1000); // 等待1秒 } catch (InterruptedException e) { e.printStackTrace(); } } } public static void main(String[] args) { Clock clock = new Clock(0, 0, 0); Thread clockThread = ...
在程序中,开发者可能使用了`std::chrono::system_clock`来获取当前系统时间,并通过`std::chrono::seconds`、`std::chrono::minutes`和`std::chrono::hours`等类型来处理时间单位。 3. **日期和时间格式化**: 在...
此外,`System.out.println()`或`System.out.printf()`可能会被用来在控制台上打印时钟的小时、分钟和秒。为了使输出更直观,可能还会使用格式化字符串,如`"%02d:%02d:%02d"`,确保小时、分钟和秒始终是两位数字,...
这个库包含了`system_clock`、`steady_clock`和`high_resolution_clock`等类,可以用来获取系统时间、创建持续时间对象等。在这个时钟程序中,`system_clock::now()`函数可能被用来获取当前时间点。 4. **格式化...
同时,使用`Thread.sleep(1000)`让线程暂停一秒钟,避免过于频繁地刷新。 这就是一个基础的Java数字时钟小程序的工作原理。这个例子展示了Java如何处理时间和日期,并在GUI环境中显示。通过学习和理解这个例子,你...
Thread.sleep(1000); } catch (InterruptedException e) { e.printStackTrace(); } } ``` 在上面的代码中,我们首先创建了一个StopWatch对象,然后使用start()方法开始计时,接着执行某个操作,最后使用stop()...
例如,C++中的`std::this_thread::sleep_for`配合`std::chrono::seconds(1)`,Java的`Thread.sleep(1000)`,Python的`time.sleep(1)`。 7. **线程生命周期**: - 启动线程后,它会运行直到完成任务或者被显式地...
1. **导入必要的命名空间**:首先,我们需要引入`System`和`System.Threading`命名空间,前者提供`DateTime`类,后者包含`Thread.Sleep`方法,用于控制程序的执行速度。 ```csharp using System; using System....
Thread clockThread = new Thread(clock); clockThread.start(); // 开始运行时钟线程 } ``` 这个简单的数字时钟程序会每秒打印一次当前时间,格式为`小时:分钟:秒`。注意,由于Java的`Thread.sleep(1000)`方法...
System.Threading.Thread.Sleep(1000); } } } } ``` 这段代码创建了一个性能计数器,用于监视所有CPU的总利用率。`"% Processor Time"`计数器表示CPU空闲时间的反比,即CPU正在处理工作的时间。`_Total`实例...
SystemClock.sleep(5 * 1000); progressDialog.dismiss(); } }).start(); ``` 在这个例子中,我们创建了一个`ProgressDialog`并在新线程中执行耗时操作,完成后关闭进度条。 最后,我们提到了`...
- `Thread.sleep(1000)`:等待1秒,实现翻页效果。 **转化为网页版时钟的关键步骤:** 1. 封装成Web组件:将上述Python或Java代码封装成一个Web组件,例如使用JavaScript、React、Vue或Angular等前端框架来实现...
Thread.sleep(5000); } catch (InterruptedException e) { } } Log.i(TAG, "Completed work @ " + SystemClock.elapsedRealtime()); sendNotification(extras.getString("message")); GcmBroadcastReceiver....
Thread.sleep(1000); // 暂停1秒,避免过于频繁检查 } ``` 4. **Java Swing的时间监听** 如果是在Swing环境中,可以使用`javax.swing.Timer`来实现时间监听,它可以将事件分发到事件队列,从而在事件调度线程中...
例如,在Java中,可以使用`java.util.Timer`和`TimerTask`类,或者`java.lang.Thread.sleep()`方法来定期更新时间;在Python中,可以使用`threading`库创建新线程,并结合`time.sleep()`函数。 用户界面的设计是另...
在这个时钟程序中,`Clock`类可能会实现`Runnable`接口或继承`Thread`类,以创建一个能独立运行的时间更新线程。线程的`run()`方法会被调用,从而不断地获取系统时间并显示。 Java的日期和时间API在`java.time`包中...
C++11引入了`std::this_thread::sleep_for`和`std::this_thread::sleep_until`这两个新函数,为线程休眠提供了一种标准化的方法,确保代码在不同平台上的一致性。 1. `std::this_thread::sleep_for`: 这个函数...
根据提供的文件信息,我们可以分析出该Java项目包含两个...该程序充分利用了Swing库的功能,如 `JFrame`、`JPanel`、`JComboBox` 和 `JLabel` 等组件来构建用户界面,并使用 `Thread` 和 `Runnable` 接口实现后台任务。
在C#中,可以使用`System.Threading.Thread.Sleep`方法实现简单的定时轮转。 3. **短进程优先**:优先选择预计运行时间最短的进程,以减少平均周转时间和响应时间。然而,如果不加以限制,可能会导致长进程长时间得...