首页 新闻 赞助 找找看

为什么这些Task是顺序执行的?

0
悬赏园豆:20 [待解决问题]
for (int i = 0; i < 10; i++)
{
    new Thread(new ParameterizedThreadStart(id =>
    {
        Thread.Sleep(1000);
        Console.WriteLine("THREAD:" + DateTime.Now.ToString() + "," + id);
    })).Start(i);
}
Thread.Sleep(5000);

for (int i = 0; i < 10; i++)
{
    new Task(id =>
    {
        Thread.Sleep(1000);
        Console.WriteLine("TASK:"+DateTime.Now.ToString() + "," + id);
    }, i).Start();
}

得到的结果是

THREAD:2014/6/9 16:51:07,0
THREAD:2014/6/9 16:51:07,2
THREAD:2014/6/9 16:51:07,3
THREAD:2014/6/9 16:51:07,4
THREAD:2014/6/9 16:51:07,5
THREAD:2014/6/9 16:51:07,1
THREAD:2014/6/9 16:51:07,6
THREAD:2014/6/9 16:51:07,7
THREAD:2014/6/9 16:51:07,8
THREAD:2014/6/9 16:51:07,9
TASK:2014/6/9 16:51:12,0
TASK:2014/6/9 16:51:12,1
TASK:2014/6/9 16:51:13,3
TASK:2014/6/9 16:51:13,2
TASK:2014/6/9 16:51:13,4
TASK:2014/6/9 16:51:14,5
TASK:2014/6/9 16:51:14,6
TASK:2014/6/9 16:51:14,7
TASK:2014/6/9 16:51:15,8
TASK:2014/6/9 16:51:15,9

问题就来了,为什么task和thread不一样?不是10个task同时执行的??竟然还是按照顺序来的???

wdwwtzy的主页 wdwwtzy | 初学一级 | 园豆:114
提问于:2014-06-09 16:51
< >
分享
所有回答(6)
0

你咋知道是按照顺序执行的?

Launcher | 园豆:45045 (高人七级) | 2014-06-09 16:55

 我的意思就是他没有和 thread一样啊,应该是10个同时运行,然后同一时间结束啊,为什么10个task不是同一时间结束?

支持(0) 反对(0) wdwwtzy | 园豆:114 (初学一级) | 2014-06-09 18:22

@wdwwtzy: 请给出“同时运行”、“同一时间结束”的定义?再你继续提问之前,可否请你去认真的读一下《操作系统》这本书,掌握些基础知识对你没有坏处。

支持(0) 反对(0) Launcher | 园豆:45045 (高人七级) | 2014-06-10 09:11
0

谁告诉你多线程是多个线程同时执行了.

你的CPU有几个核心,或者说几个线程,就能同时处理几个线程.至于顺序不顺序的,那本来就是不确定的.不能当真的

吴瑞祥 | 园豆:29449 (高人七级) | 2014-06-09 17:15

 thread是啊

支持(0) 反对(0) wdwwtzy | 园豆:114 (初学一级) | 2014-06-09 18:22

@wdwwtzy: ````你对多线程的理解是错误的.就算以你的想法,多个线程可以同时执行,但每个线程都是从主线程生成的.也就是说子线程的生成都是顺序的,那由于生成时的时间差,执行时自然就会有时间差了.

你先去了解下CPU是怎么执行线程的吧.

如果你的CPU有2个核心.那么你的系统就只能同时执行2个线程,如果系统中所有线程的数量超过2个,CPU核心就会在不同的线程之间切换,以实现多线程处理.但是是切换执行,而不是同时执行

支持(0) 反对(0) 吴瑞祥 | 园豆:29449 (高人七级) | 2014-06-09 18:33
0

从你的输出来看,也不是顺序执行的呀~

幻天芒 | 园豆:37175 (高人七级) | 2014-06-09 17:18

 我的意思就是他没有和 thread一样啊,应该是10个同时运行,然后同一时间结束啊,为什么10个task不是同一时间结束?

支持(0) 反对(0) wdwwtzy | 园豆:114 (初学一级) | 2014-06-09 18:22

@wdwwtzy: 多线程只是说任务可以并行,猜单核处理上,同一时间还是只有一个线程再跑呢。并没有要求同时开始,同时结束啊。不管你是Task还是Thread,都不是同时的。

支持(0) 反对(0) 幻天芒 | 园豆:37175 (高人七级) | 2014-06-10 00:55
0

0、1、3、2、4这是顺序?

爱编程的大叔 | 园豆:30839 (高人七级) | 2014-06-09 18:02

 我的意思就是他没有和 thread一样啊,应该是10个同时运行,然后同一时间结束啊,为什么10个task不是同一时间结束?

支持(0) 反对(0) wdwwtzy | 园豆:114 (初学一级) | 2014-06-09 18:22
0

应该是Thread.sleep()函数的问题吧,我记得这个函数不影响线程内部的啊,所以你所有的输出都是一个时间,你去查查吧。

kylin.chen | 园豆:983 (小虾三级) | 2014-06-09 19:21

你里面用this.sleep()看看,我也不记得了。

支持(0) 反对(0) kylin.chen | 园豆:983 (小虾三级) | 2014-06-09 19:23
0

你换成100个1000个试试,10个不能说明问题的,没准是凑巧呢

刘宏玺 | 园豆:14020 (专家六级) | 2014-06-09 22:37
清除回答草稿
   您需要登录以后才能回答,未注册用户请先注册