日期:2014-05-20  浏览次数:20626 次

关于线程和双核
System.currentTimeMillis()

在一台双核的机器上,在不同的线程中调用以上代码,
是否可能得到完全相同的时间?

------解决方案--------------------
理论上是可能的。
------解决方案--------------------
那要看线程是否同时被执行,理论上说是不能保证的
------解决方案--------------------
单核处理器实际上采用了超线程技术,理论上就像多线程一样,并行运作,实际上,只是在一个CPU里面多加了一个逻辑处理单元,但是整数运算单元,浮点运算单元,二级缓存都是共享的,所以一旦两个线程遇到一个资源的时候就必须停止其中一个,等待另外一个执行完才可以继续执行。也就是说单核CPU没有做到资源的共享。
但是双核处理器就不一样了,每个核心都有自己独立的指令集,执行单元,所以实实在在的实现了两个线程并行工作。举个例子吧,单核CPU就像一个人有一个大脑两个小脑,而双核CPU就是一个人有两个大脑
------解决方案--------------------
建议LZ去看下操作系统的线程调度方式,在一个双核CPU里面,理论上只能同时执行两个线程,线程调度上并不是人工控制,而是操作系统根据线程的优先级、线程的总执行时间(比如线程A总执行时间需要1分钟,而线程B可能只要1秒,则系统很可能会让线程B先执行,就算线程A的优先级比线程B要高)等因素来决定先执行哪个线程,所以要同时执行你指定的两个线程,我觉得几乎不可能。