为啥我的多线程不起作用?

xingchen1008 2012-05-04 06:14:37

Thread[] MyThread = new Thread[ReportExecuter.Length];
for (int i = 0; i < ReportExecuter.Length; i++)
{
MyThread[i] = new Thread(ThreadMethod);
MyThread[i].Name = i.ToString();
MyThread[i].IsBackground = true;
MyThread[i].Start();
MyThread[i].Join();
}
...全文
431 13 打赏 收藏 转发到动态 举报
写回复
用AI写文章
13 条回复
切换为时间正序
请发表友善的回复…
发表回复
TNight 2012-05-07
  • 打赏
  • 举报
回复
[Quote=引用 7 楼 的回复:]
最简单的改进就是把Thread.Join放到循环后面。

你原先代码是,开一报告线程并等它结束,然后循环下一报告(因此一次只有一个报告线程在运行)。
改进代码是,先循环把所有的线程都运行起来(多个报告线程在运行)。然后等待所有线程结束。

C# code

Thread[] MyThread = new Thread[ReportExecuter.Length……
[/Quote]
谢谢...
cnwin 2012-05-07
  • 打赏
  • 举报
回复
哦,说耗时嘛,你倒说对了。有些情况下用多线程或许耗时还会多一点呢。也就是说得分情况决定是否用多线程。本身工作时间不很长的,你要分线程,开线程还要占用时间呢。所以要科学合理的运用多线程。
Conmajia 2012-05-07
  • 打赏
  • 举报
回复
你的 ThreadMethod 没有针对多线程进行设计继续用单线程一样的,

你怎么能指望电脑会那么智能的帮你把串行算法转成并行。。

Threading 是允许你在多个线程上执行,但不可能帮你完成并行算法,耗时一样一点都不意外
macooidle 2012-05-07
  • 打赏
  • 举报
回复
AutoResetEvent / ManualResetEvent 试试看
TNight 2012-05-07
  • 打赏
  • 举报
回复
[Quote=引用 5 楼 的回复:]
所谓不起作用是指?
[/Quote]
我计算了一下耗时,发现这个所谓的多线程和单线程执行耗时完全一样,所以我怀疑这个多线程没起作用
TNight 2012-05-07
  • 打赏
  • 举报
回复
[Quote=引用 6 楼 的回复:]
控制台程序吗?
[/Quote]
不是,是一个使用多线程同时查询数据然后汇总的过程
gomoku 2012-05-05
  • 打赏
  • 举报
回复
最简单的改进就是把Thread.Join放到循环后面。

你原先代码是,开一报告线程并等它结束,然后循环下一报告(因此一次只有一个报告线程在运行)。
改进代码是,先循环把所有的线程都运行起来(多个报告线程在运行)。然后等待所有线程结束。

Thread[] MyThread = new Thread[ReportExecuter.Length];
for (int i = 0; i < ReportExecuter.Length; i++)
{
MyThread[i] = new Thread(ThreadMethod);
MyThread[i].Name = i.ToString();
MyThread[i].IsBackground = true;
MyThread[i].Start();
}
for (int i = 0; i < ReportExecuter.Length; i++)
{
MyThread[i].Join(); //<--
}
startstartsvip 2012-05-04
  • 打赏
  • 举报
回复


控制台程序吗?
xboxeer 2012-05-04
  • 打赏
  • 举报
回复
所谓不起作用是指?
rayyu1989 2012-05-04
  • 打赏
  • 举报
回复
+1[Quote=引用 2 楼 的回复:]

把 MyThread[i].Join();去掉
[/Quote]
TNight 2012-05-04
  • 打赏
  • 举报
回复
[Quote=引用 2 楼 的回复:]

把 MyThread[i].Join();去掉
[/Quote]
不Join的话可能得不到数据的
花痴 2012-05-04
  • 打赏
  • 举报
回复
把 MyThread[i].Join();去掉
anzhiqiang_touzi 2012-05-04
  • 打赏
  • 举报
回复
怎么没起作用了

Thread[] MyThread = new Thread[ReportExecuter.Length];
for (int i = 0; i < ReportExecuter.Length; i++)
{
MyThread[i] = new Thread(ThreadMethod);
MyThread[i].Name = i.ToString();
MyThread[i].Start();
}

111,126

社区成员

发帖
与我相关
我的任务
社区描述
.NET技术 C#
社区管理员
  • C#
  • Creator Browser
  • by_封爱
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告

让您成为最强悍的C#开发者

试试用AI创作助手写篇文章吧