黑马程序员技术交流社区

标题: 多线程问题 [打印本页]

作者: 吕振    时间: 2013-3-7 00:20
标题: 多线程问题
下面的代码是创建一个多线程的例子,启动程序在for循环中动态创建多条线程可是为啥没有创建成功呢??只显示一个线程在运行showNum方法....
private void button1_Click(object sender, EventArgs e)
        {
            createThread();
        }

        void createThread()
        {
            for (int i = 0; i < 30; i++)
            {
                Thread th = new Thread(new ThreadStart(showNum));
                th.IsBackground = true;
                th.Start();
                //label1.Text = "启动了" + i + "个线程对象!";
            }
        }

        void showNum()
        {
            DateTime start = DateTime.Now;

            for (int i = 0; i < 9999; i++)
            {
                textBox1.Text = i.ToString();
                Thread.Sleep(100);
            }

            DateTime end = DateTime.Now;

            TimeSpan span = end - start;

            MessageBox.Show(span.Seconds.ToString());
        }
作者: 康晓璞    时间: 2013-3-7 11:28
标题: RE: 多线程问题
将ShowNum的方法修改一下,这样可以看到正在运行的线程的唯一标示,再将它正在执行的 i  打印出来,就可以看到启动了多少了线程,每个线程运行到哪里了。
  void createThread()
        {
//启动几个线程就可以看到结果了,不需要那么多
            for (int i = 0; i < 5; i++)
            {
                Thread th = new Thread(new ThreadStart(showNum));
                th.IsBackground = true;
                th.Name = "线程"+i;
                th.Start();   
          }
        }     
   void showNum()
        {
            for (int i = 1; i <= 5;i++ )
            {
                //ManagedThreadId:获取当前托管线程的唯一标识符
                Console.WriteLine("当前的线程的ManagedThreadId:{0},执行到{1}次", Thread.CurrentThread.ManagedThreadId, i);
                Thread.Sleep(100);
            }
        }

结果:
当前的线程的ManagedThreadId:10,执行到1次
当前的线程的ManagedThreadId:11,执行到1次
当前的线程的ManagedThreadId:12,执行到1次
当前的线程的ManagedThreadId:14,执行到1次
当前的线程的ManagedThreadId:13,执行到1次
当前的线程的ManagedThreadId:10,执行到2次
当前的线程的ManagedThreadId:11,执行到2次
当前的线程的ManagedThreadId:12,执行到2次
当前的线程的ManagedThreadId:13,执行到2次
当前的线程的ManagedThreadId:14,执行到2次
当前的线程的ManagedThreadId:11,执行到3次
当前的线程的ManagedThreadId:10,执行到3次
当前的线程的ManagedThreadId:12,执行到3次
当前的线程的ManagedThreadId:14,执行到3次
当前的线程的ManagedThreadId:13,执行到3次
当前的线程的ManagedThreadId:11,执行到4次
当前的线程的ManagedThreadId:10,执行到4次
当前的线程的ManagedThreadId:12,执行到4次
当前的线程的ManagedThreadId:13,执行到4次
当前的线程的ManagedThreadId:14,执行到4次
当前的线程的ManagedThreadId:10,执行到5次
当前的线程的ManagedThreadId:11,执行到5次
当前的线程的ManagedThreadId:12,执行到5次
线程 '线程1' (0x53c) 已退出,返回值为 0 (0x0)。
线程 '线程0' (0x14d8) 已退出,返回值为 0 (0x0)。
线程 '线程2' (0x15ac) 已退出,返回值为 0 (0x0)。
线程 '线程4' (0x131c) 已退出,返回值为 0 (0x0)。
线程 '线程3' (0x15a8) 已退出,返回值为 0 (0x0)。
当前的线程的ManagedThreadId:13,执行到5次
当前的线程的ManagedThreadId:14,执行到5次





欢迎光临 黑马程序员技术交流社区 (http://bbs.itheima.com/) 黑马程序员IT技术论坛 X3.2