当前位置:编程学习 > C#/ASP.NET >>

Thread问题

int i = 0;
Thread threadA;
  //数字变化滚动方法
        public void startA()
        {
            while (true)
            {
                Random r = new Random();
                i = r.Next(num);
                Thread.Sleep(10);               
            }
        }
 private void button7_Click(object sender, EventArgs e)
        {
            for (int aa = 1; aa < 4; aa++)
            {
                threadA = new Thread(new ThreadStart(startA));
                threadA.Start();
                threadA.Abort();
                MessageBox.Show(i.ToString());
            }
}

为什么取得i的值老是0? --------------------编程问答-------------------- New Random放到循环外,另外num是多少 --------------------编程问答--------------------
引用 1 楼 bdmh 的回复:
New Random放到循环外,另外num是多少
另外,根据我的经验,如果4个进程同时执行而在使用i时,没有对它进行lock,几乎所有线程是同时访问其中的代码,再加之你的Random是在线程执行的方法中初始化的,这就会造成两个可能性问题:
1、同时初始化,起始值完全相同,你的问题应该属于这一种,所以全是0;
2、每个线程产生的随机数相同,这个我在QQ的问问中看到有人问过,当时我帮他想的方法是用线程等待,不要多个线程同时启动。
补充:.NET技术 ,  C#
CopyRight © 2022 站长资源库 编程知识问答 zzzyk.com All Rights Reserved
部分文章来自网络,