本帖最后由 MaperHeal 于 2012-03-24 18:16:06 编辑

解决方案 »

  1.   

    这个好像有点关系  多核的CPU可以同时运行几个进程
      

  2.   

    应该有种机制 使得一个线程调用的函数运行完以后 才允许另一个线程运行  当他们都共享某些变量时
    MFC中是这样的   java  中应该也是这样的
      

  3.   

    这个跟多核是有点关系,想让每个线程共享资源,又不相互影响的话;定义一个同步代码块。将run()方法改为public synchronized void run()。每个线程执行完自己的代码块,在让给其他线程。
      

  4.   

    回上面各层知道使用synchronized锁住,我想了解为啥我多线程故意制造问题的时候输出也不是我希望的结果这么奇葩
      

  5.   

    如果每个线程的时间片都相同,那么,理论上应该最先输出三个1.
    但是,实际上,每个线程的时间片,是由操作系统来决定的。
    上述楼主给出的情况,很可能会出现。可以假设如下情况:
    1.第一个线程运气好,执行一次循环,输出1,之后让出CPU;
    2.第二个线程运气一般,第一次循环执行到yield语句,让出CPU;
    3.第三个线程运气差,执行完while (id <= 20)语句,让出CPU;
    4.之后,第一个线程获得执行机会,又执行了一次循环,输出2,让出CPU;
    5.之后,第二个线程没被轮到,没有执行任何代码;
    6.第三个线程获得执行机会,这时接着上次,由于上次while语句id是1,所以,打印输出1,
    7.第一个线程,时运不计,一直卡在id++这句之前,直到有个线程打印14了,才获得下一次运行机会,打印3.