`
wzucxd
  • 浏览: 26542 次
  • 性别: Icon_minigender_1
  • 来自: 杭州
文章分类
社区版块
存档分类
最新评论

Date().getTime()线程堵塞问题

 
阅读更多

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

....


可以看到运行到一定次数的时候就会被阻塞一下

分享到:
评论

相关推荐

    js_ThreadPool

    Web Worker允许JavaScript在后台线程中运行脚本,不会阻塞主线程,这样就可以同时处理多个耗时任务。创建一个Web Worker需要创建一个新的Worker对象,并传入一个脚本URL,该脚本将在新的线程中运行。主线程与Worker...

    并发编程中是如何降低锁粒度的,怎么做到性能优化!.docx

    当一个线程被阻塞,操作系统需要保存当前线程的状态,并恢复另一个线程的执行状态,这就是上下文切换。每次上下文切换都会消耗一定的CPU时间,因此尽量减少不必要的上下文切换可以提升性能。 其次,内存同步是确保...

    Java小片段

    java.sql.Date sqlDate = new java.sql.Date(utilDate.getTime()); ``` 7. **使用NIO进行快速文件拷贝**: - Java的New IO(NIO)提供了高效且非阻塞的I/O操作。实现文件复制,可以使用`java.nio`包中的`...

    20个超级有用的Java程序片段

    - 通过 `new sql.Date(utilDate.getTime())` 将 `util.Date` 转换为 `sql.Date`。 7. **使用NIO进行文件快速拷贝** - Java的非阻塞I/O(NIO)提供了一种高效的方式进行文件拷贝,通过 `Channels` 和 `Buffers` ...

    Android 抢购倒计时 具体到天数 时 分 秒

    我们将在Activity的`onCreate()`方法中启动一个新的线程或者使用Handler来执行倒计时任务,以避免阻塞主线程。这里以使用Handler为例: ```java private Handler handler = new Handler() { @Override public ...

    20个常用的方法总结1

    - 直接通过构造函数`new java.sql.Date(utilDate.getTime())`将`utilDate`转换为`sql.Date`。 除了上述内容,还有其他几个常用的Java编程技巧: 7. **异常处理**: - 使用`try-catch-finally`块来捕获并处理异常...

    实 现 倒 计 时.rar

    同时,对于服务器端的应用,可能需要考虑多线程或异步处理,以确保倒计时不被其他任务阻塞。 在给定的压缩包"实现倒计时.rar"中,可能包含的文件可能是源代码、设计文档、教程或者示例项目,用于帮助开发者学习和...

    NodeJs中的非阻塞方法介绍

    在计算机编程中,“阻塞”通常指的是某个操作会暂时挂起当前线程或进程,直到该操作完成为止。例如,当执行文件读取或网络请求时,如果使用阻塞方式,那么在这些操作完成之前,程序将无法执行其他任何任务。相反,...

    轻松创建nodejs服务器(7):阻塞操作的实现

    在实际开发中,我们应该尽量避免使用阻塞操作,改用非阻塞操作,这样可以充分利用Node.js的单线程事件循环模型,实现高效的服务处理。例如,使用异步的文件系统API、异步数据库查询以及依赖于回调函数或Promise的...

    js设置延迟加载

    需要注意的是,由于JavaScript是单线程执行的,因此这种方法会阻塞其他任务的执行,可能会导致页面失去响应。 #### 性能考虑与最佳实践 虽然上述两种方法都可以实现基本的延迟加载功能,但在实际项目中还需要考虑...

    java实现电子时钟

    在电子时钟中,我们通常创建一个新的线程来负责实时更新时间显示,因为这需要不断地循环执行,不能阻塞主线程,否则会影响用户界面的响应速度。我们可以创建一个名为`ClockThread`的类,继承自`Thread`,并在`run`...

    js中setTimeout的妙用--防止循环超时

    if (new Date().getTime() - start &gt; sleepTime) { break; } } } ``` 在这个例子中,`tcCircleUseSetTimeout`函数通过`setTimeout`分批处理数组。每次只处理一个元素,处理完成后,设置100毫秒的延迟,然后继续...

    Java开发笔记

    java.sql.Date sqlDate = new java.sql.Date(utilDate.getTime()); ``` 4. **反射执行**: 反射是Java中的一个重要特性,它允许程序在运行时检查自身,并且可以“反射”地调用方法或构造函数。 - **示例**: 获取...

    javascript中不提供sleep功能如何实现这个功能

    不过,这种方法的缺点在于它会阻塞JavaScript的执行线程,导致浏览器或应用在等待期间无法处理其他任务。此外,由于不同设备的CPU性能差异,实际的延迟时间可能在不同设备上不一致。代码示例如下: ```javascript ...

    javascript 使用sleep函数的常见方法详解

    然而,JavaScript作为一个非阻塞单线程环境,其原生并不支持`sleep`,因为这会阻塞整个事件循环,导致用户界面无法响应。本文将探讨如何在JavaScript中模拟实现`sleep`功能,并讨论不同实现方式的优缺点。 一、什么...

    Web前端开发技术-window对象.pptx

    console.log('还剩' + (60 - Math.floor((new Date().getTime() - smsTimer) / 1000)) + '秒再次单击'); } else { console.log('正在冷却中'); clearTimeout(smsTimer); canSend = true; } } ``` 掌握这些...

    Java clock_javaclock_java_

    Swing组件通常是非阻塞的,这意味着它们可以在事件调度线程中安全地更新,这对于实时应用如时钟来说非常重要。 关键的类可能是`JFrame`,它是窗口的基础,以及`JLabel`或`JPanel`,用于显示时钟的数字。为了显示...

    javascript里模拟sleep(两种实现方式)

    在JavaScript中,由于它是单线程的,没有真正的睡眠(sleep)函数,因为这会阻塞整个事件循环。然而,有时候我们可能需要模拟一个暂停效果,例如在等待某个操作完成或者延迟执行某些代码。通常有两种常见的方式来...

Global site tag (gtag.js) - Google Analytics