日期:2014-05-20  浏览次数:20769 次

请问主线程和子线程是如何条用的阿?
using   System;
using   System.Threading;

namespace   SimpleThreadDemo
{
class   Class1
{
[STAThread]
static   void   Main(string[]   args)
{
Thread.CurrentThread.Name= "主线程 ";
Thread   objThread=new   Thread(new   ThreadStart(ActionMethod));
objThread.Name= "子线程 ";
//开始子线程
//并为该线程执行ActionMethod
objThread.Start();
//为主线程执行ActionMethod
ActionMethod();
}
//是否有次序?
static   void   ActionMethod()
{
for(int   count=1;count <=10;count++)
{
Console.WriteLine( "线程名: "+Thread.CurrentThread.Name);
}
}
}
}


------解决方案--------------------
是否有次序?
-----------
这次序应该是不定的吧,取决于系统的调度...(个人观点,仅供参考)
------解决方案--------------------
TO:二者的区别在什么地方呢?

没太明白,不都是在调用这个方法吗?

楼主看到的现象是不是总是子线程执行完了,才会执行主线程?

其实两个都同时在执行,只不过先启动的子线程,所以子线程最先抢占到时间片,由于你循环的次数太少,所以在分配的一个时间片中已运行结束..

你可以作一下改变,比如增大循环的次数,或者打印一次,休眠1ms..


------解决方案--------------------
static void Main(string[] args)
{
Thread.CurrentThread.Name = "主线程 ";
Thread objThread = new Thread(new ThreadStart(ActionMethod));
objThread.Name = "子线程 ";
//开始子线程
//并为该线程执行ActionMethod
objThread.Start();
//为主线程执行ActionMethod
ActionMethod();
}
static void ActionMethod()
{
for (int count = 1; count <= 10; count++)
{
Console.WriteLine( "线程名: " + Thread.CurrentThread.Name);
Thread.Sleep(1);
}
}

输出:
线程名:主线程
线程名:子线程
线程名:主线程
线程名:子线程
线程名:主线程
线程名:子线程
线程名:主线程
线程名:子线程
线程名:主线程
线程名:子线程
线程名:主线程
线程名:子线程
线程名:主线程
线程名:子线程
线程名:主线程
线程名:子线程
线程名:主线程
线程名:子线程
线程名:主线程
线程名:子线程