System.currentTimeMillis会阻塞?
时间: 2023-05-29 07:04:25 浏览: 74
不会。System.currentTimeMillis()方法只是返回当前时间的毫秒数,它不涉及线程的阻塞或等待。该方法是一个本地方法,它使用系统时钟来获取当前时间。因此,它是一个非常快速和高效的方法,可以在任何时候调用。
相关问题
优化此代码 activity.getApplication().registerActivityLifecycleCallbacks(new Application.ActivityLifecycleCallbacks() { @Override public void onActivityCreated(Activity activity, Bundle savedInstanceState) { } @Override public void onActivityStarted(Activity activity) { } @Override public void onActivityResumed(Activity activity) { activityHashMap.put(activity.hashCode(), new WeakReference<>(activity)); if (activityHashMap != null || activityHashMap.size() != 0) { LogUtils.i(TAG, "go foreGround:" + System.currentTimeMillis()); background.set(false); if (apmThread != null) { if (needLoading.get() && loading.get()) { JSONObject jsonObject = new JSONObject(); JsonUtils.put(jsonObject, ConfigConst.end, System.currentTimeMillis()); Message message = apmThread.apmHandler.obtainMessage(); message.obj = jsonObject; message.what = APMThread_goForeground; apmThread.apmHandler.sendMessage(message); } } needLoading.set(false); } }
这段代码主要是在应用程序的 Activity 生命周期回调方法中监听应用程序是否进入前台,并且在应用程序进入前台时执行一些操作。优化建议如下:
1. 将 activityHashMap 的判断放在 onActivityResumed 方法的外面,可以减少每次进入前台时的判断次数。
2. 使用 ConcurrentHashMap 来代替 HashMap,以避免在多线程环境中出现并发问题。
3. 避免在 onActivityResumed 方法中进行耗时操作,尤其是网络操作,否则可能会影响用户体验。
4. 可以考虑使用 RxJava 等框架来进行异步操作,以避免阻塞主线程。
下面是优化后的代码:
ConcurrentHashMap<Integer, WeakReference<Activity>> activityMap = new ConcurrentHashMap<>();
activity.getApplication().registerActivityLifecycleCallbacks(new Application.ActivityLifecycleCallbacks() {
@Override
public void onActivityCreated(Activity activity, Bundle savedInstanceState) {
}
@Override
public void onActivityStarted(Activity activity) {
}
@Override
public void onActivityResumed(Activity activity) {
activityMap.put(activity.hashCode(), new WeakReference<>(activity));
if (activityMap.size() > 0) {
LogUtils.i(TAG, "go foreGround:" + System.currentTimeMillis());
background.set(false);
if (apmThread != null && needLoading.get() && loading.get()) {
JSONObject jsonObject = new JSONObject();
JsonUtils.put(jsonObject, ConfigConst.end, System.currentTimeMillis());
Message message = apmThread.apmHandler.obtainMessage();
message.obj = jsonObject;
message.what = APMThread_goForeground;
apmThread.apmHandler.sendMessage(message);
}
needLoading.set(false);
}
}
});
java怎么计算一个方法的运行时间
在Java中,可以通过System.currentTimeMillis()方法来计算一个方法的运行时间。具体步骤如下:
1. 在方法的开始处记录一个起始时间,使用System.currentTimeMillis()方法获取当前时间的毫秒数。
2. 在方法的结束处记录一个结束时间,同样使用System.currentTimeMillis()方法获取当前时间的毫秒数。
3. 计算方法的运行时间,即结束时间减去起始时间,得到的结果即为方法的运行时间。
示例代码如下:
long startTime = System.currentTimeMillis();
// 方法执行...(需要计算运行时间的代码)
long endTime = System.currentTimeMillis();
long duration = endTime - startTime;
System.out.println("方法运行时间为:" + duration + "ms");
需要注意的是,上述方法只是粗略的计算方法的运行时间,可能会受到许多因素的影响,如系统负载、方法执行过程中的阻塞等。如果需要更精确的计算方法运行时间,可以使用Java Profiler等相关工具来进行实时监控。
相关推荐
![pdf](https://img-home.csdnimg.cn/images/20210720083512.png)
![pdf](https://img-home.csdnimg.cn/images/20210720083512.png)
![doc](https://img-home.csdnimg.cn/images/20210720083327.png)
![](https://csdnimg.cn/download_wenku/file_type_ask_c1.png)
![](https://csdnimg.cn/download_wenku/file_type_ask_c1.png)
![](https://csdnimg.cn/download_wenku/file_type_ask_c1.png)
![](https://csdnimg.cn/download_wenku/file_type_ask_c1.png)
![](https://csdnimg.cn/download_wenku/file_type_ask_c1.png)
![](https://csdnimg.cn/download_wenku/file_type_ask_c1.png)
![](https://csdnimg.cn/download_wenku/file_type_ask_c1.png)
![](https://csdnimg.cn/download_wenku/file_type_ask_c1.png)
![](https://csdnimg.cn/download_wenku/file_type_ask_c1.png)
![](https://csdnimg.cn/download_wenku/file_type_ask_c1.png)
![](https://csdnimg.cn/download_wenku/file_type_ask_c1.png)
![](https://csdnimg.cn/download_wenku/file_type_ask_c1.png)
![](https://csdnimg.cn/download_wenku/file_type_ask_c1.png)