无论线程如何跑,反正i总是被+500次,-500次所以说是线程嘛  不是说等两个线程都结束了才 Console.WriteLine
Write时i还没有被执行任何操作

解决方案 »

  1.   

    using System;
    using System.Threading;
    namespace C
    {
    class GGG
    {
    static int i; static void Main()

    Thread t1=new Thread(new ThreadStart(C.GGG.HH));
    Thread t2=new Thread(new ThreadStart(GGG.Dd));
    t1.Start();
    t2.Start();
    Console.WriteLine(i);}
    public static void HH()
    {
    for(int j=0;j<1000;j++)
    {
    if(j%2==0)
    i++;
    }
    }
    public static void Dd()
    {
    for(int k=0;k<1000;k++)
    {
    if(k%2==0)
    i--;
    }
    }}}
      

  2.   

    不管下面两个线程的执行函数怎么写都应该输出i的初始值-也就是0,因为Console.Write(i)的时候线程刚刚启动,线程基本来没有得到运行的时间,主线程就打印出i了
      

  3.   

    不要猜想,运行一下试一试。这里面的时间太短了,两个线程还没有轮到时间片,主线程就已经打印出结果了,所以肯定是0。public static void HH()
    {
        for(int j=0;j<1000;j++)
        {
            if(j%2==0)
            i++;
            Console.WriteLine(i);
        }
    }public static void Dd()
    {
        for(int k=0;k<1000;k++)
        {
            if(k%2==0)
            i--;
            Console.WriteLine(i);
        }
    }输出的第一个数字肯定还是0,因为这是主线程输出的。
    以后的数字就不一定了,因为两个线程一直在争用i,所以输出不一定。
      

  4.   

    怎么不搞点儿线程池,线程安全性之类的.ManualResertEvent(),waitont(),syncLock, mutex