new Date().getTime()出现线程堵塞的问题概率比较低,但是一旦出现,那么性能也将下降很多,下面代码可以测试这个问题,创建10个线程,不断执行。
其堵塞原因在于这个方法引用了getJulianCalendar(),
synchronized private static final BaseCalendar getJulianCalendar() {
if (jcal == null) {
jcal = (BaseCalendar) CalendarSystem.forName("julian");
}
return jcal;
}
测试代码:
public class DuMain {
public static void main(String[] args) {
long time = System.currentTimeMillis();
test();
long end = System.currentTimeMillis();
System.out.println(end - time);
//................
for(int i=0;i<10;i++){
new Thread(){
@Override
public void run() {
for(int i=0;i<1000000000;i++){
test();
// System.out.println(i);
}
}
}.start();
}
for(int i=0;i<1000000000;i++){
time = System.currentTimeMillis();
test();
end = System.currentTimeMillis();
System.out.println(""+i+"--"+(end - time));
// System.out.println(i);
}
}
public static boolean test() {
Date begin = new Date();
int ONE_SECOND = 2;
boolean result = false;
while (true) {
if (new Date().getTime() - begin.getTime() >= ONE_SECOND) {
result = true;
break;
}
}
return result;
}
}
result:
....
11423--2
11424--274
11425--2
11426--3
....
可以看到运行到一定次数的时候就会被阻塞一下
分享到:
相关推荐
Web Worker允许JavaScript在后台线程中运行脚本,不会阻塞主线程,这样就可以同时处理多个耗时任务。创建一个Web Worker需要创建一个新的Worker对象,并传入一个脚本URL,该脚本将在新的线程中运行。主线程与Worker...
当一个线程被阻塞,操作系统需要保存当前线程的状态,并恢复另一个线程的执行状态,这就是上下文切换。每次上下文切换都会消耗一定的CPU时间,因此尽量减少不必要的上下文切换可以提升性能。 其次,内存同步是确保...
java.sql.Date sqlDate = new java.sql.Date(utilDate.getTime()); ``` 7. **使用NIO进行快速文件拷贝**: - Java的New IO(NIO)提供了高效且非阻塞的I/O操作。实现文件复制,可以使用`java.nio`包中的`...
- 通过 `new sql.Date(utilDate.getTime())` 将 `util.Date` 转换为 `sql.Date`。 7. **使用NIO进行文件快速拷贝** - Java的非阻塞I/O(NIO)提供了一种高效的方式进行文件拷贝,通过 `Channels` 和 `Buffers` ...
我们将在Activity的`onCreate()`方法中启动一个新的线程或者使用Handler来执行倒计时任务,以避免阻塞主线程。这里以使用Handler为例: ```java private Handler handler = new Handler() { @Override public ...
- 直接通过构造函数`new java.sql.Date(utilDate.getTime())`将`utilDate`转换为`sql.Date`。 除了上述内容,还有其他几个常用的Java编程技巧: 7. **异常处理**: - 使用`try-catch-finally`块来捕获并处理异常...
同时,对于服务器端的应用,可能需要考虑多线程或异步处理,以确保倒计时不被其他任务阻塞。 在给定的压缩包"实现倒计时.rar"中,可能包含的文件可能是源代码、设计文档、教程或者示例项目,用于帮助开发者学习和...
在计算机编程中,“阻塞”通常指的是某个操作会暂时挂起当前线程或进程,直到该操作完成为止。例如,当执行文件读取或网络请求时,如果使用阻塞方式,那么在这些操作完成之前,程序将无法执行其他任何任务。相反,...
在实际开发中,我们应该尽量避免使用阻塞操作,改用非阻塞操作,这样可以充分利用Node.js的单线程事件循环模型,实现高效的服务处理。例如,使用异步的文件系统API、异步数据库查询以及依赖于回调函数或Promise的...
需要注意的是,由于JavaScript是单线程执行的,因此这种方法会阻塞其他任务的执行,可能会导致页面失去响应。 #### 性能考虑与最佳实践 虽然上述两种方法都可以实现基本的延迟加载功能,但在实际项目中还需要考虑...
在电子时钟中,我们通常创建一个新的线程来负责实时更新时间显示,因为这需要不断地循环执行,不能阻塞主线程,否则会影响用户界面的响应速度。我们可以创建一个名为`ClockThread`的类,继承自`Thread`,并在`run`...
if (new Date().getTime() - start > sleepTime) { break; } } } ``` 在这个例子中,`tcCircleUseSetTimeout`函数通过`setTimeout`分批处理数组。每次只处理一个元素,处理完成后,设置100毫秒的延迟,然后继续...
java.sql.Date sqlDate = new java.sql.Date(utilDate.getTime()); ``` 4. **反射执行**: 反射是Java中的一个重要特性,它允许程序在运行时检查自身,并且可以“反射”地调用方法或构造函数。 - **示例**: 获取...
不过,这种方法的缺点在于它会阻塞JavaScript的执行线程,导致浏览器或应用在等待期间无法处理其他任务。此外,由于不同设备的CPU性能差异,实际的延迟时间可能在不同设备上不一致。代码示例如下: ```javascript ...
然而,JavaScript作为一个非阻塞单线程环境,其原生并不支持`sleep`,因为这会阻塞整个事件循环,导致用户界面无法响应。本文将探讨如何在JavaScript中模拟实现`sleep`功能,并讨论不同实现方式的优缺点。 一、什么...
console.log('还剩' + (60 - Math.floor((new Date().getTime() - smsTimer) / 1000)) + '秒再次单击'); } else { console.log('正在冷却中'); clearTimeout(smsTimer); canSend = true; } } ``` 掌握这些...
Swing组件通常是非阻塞的,这意味着它们可以在事件调度线程中安全地更新,这对于实时应用如时钟来说非常重要。 关键的类可能是`JFrame`,它是窗口的基础,以及`JLabel`或`JPanel`,用于显示时钟的数字。为了显示...
在JavaScript中,由于它是单线程的,没有真正的睡眠(sleep)函数,因为这会阻塞整个事件循环。然而,有时候我们可能需要模拟一个暂停效果,例如在等待某个操作完成或者延迟执行某些代码。通常有两种常见的方式来...