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

解决方案 »

  1.   

    单核处理器实际上采用了超线程技术,理论上就像多线程一样,并行运作,实际上,只是在一个CPU里面多加了一个逻辑处理单元,但是整数运算单元,浮点运算单元,二级缓存都是共享的,所以一旦两个线程遇到一个资源的时候就必须停止其中一个,等待另外一个执行完才可以继续执行。也就是说单核CPU没有做到资源的共享。
    但是双核处理器就不一样了,每个核心都有自己独立的指令集,执行单元,所以实实在在的实现了两个线程并行工作。举个例子吧,单核CPU就像一个人有一个大脑两个小脑,而双核CPU就是一个人有两个大脑
      

  2.   

    偶以前学过Intel汇编语言
    虽然有两个CPU,但是时钟还是一个?所以……
      

  3.   

    建议LZ去看下操作系统的线程调度方式,在一个双核CPU里面,理论上只能同时执行两个线程,线程调度上并不是人工控制,而是操作系统根据线程的优先级、线程的总执行时间(比如线程A总执行时间需要1分钟,而线程B可能只要1秒,则系统很可能会让线程B先执行,就算线程A的优先级比线程B要高)等因素来决定先执行哪个线程,所以要同时执行你指定的两个线程,我觉得几乎不可能。
      

  4.   

    这样说吧:比如现在英特尔的CPU,四核八线程,四核就像四条马路,然而四核没有超线程之前是四线程,开了超线程后就像把马路拓宽了,每条马路能同时通过两辆车,而之前每条马路仅能通过同时一辆车。CPU的主频又决定了你这条马路是慢车道还是快车道。现在的英特尔的CPU的睿频技术,系统运行时,可能每个核心CPU的主频又不一样。