在我们的写的程序中,在没加入Thread类的时候,是不是还有线程呢?
public void Method()
{
for(int t=0; t< 10);t++)
{
Thread thread = new Thread(new ThreadStart(Sort));
thread.Name = Convert.ToString(t);
thread.Start();
}}public void Sort()
{
try
{
while(true)
{
swaped = false;
for (int j = 0; j<valueArray.Length-1; j++)
{
lock(typeof(Thread))
{ /* If the left-hand side value is greater swap values*/
if(valueArray[j] > valueArray[j+1]) 
{
int T = valueArray[j];
valueArray[j] = valueArray[j+1];
valueArray[j+1] = T;
swaped = true;
}
}
}
Thread.Sleep(1);
if(!swaped) { break; }
}
Thread.CurrentThread.Abort();
}
catch(Exception ex)
{
if( Interlocked.Increment(ref threadCounter) == Convert.ToInt64(ddlThreadNum.SelectedItem.Text.ToString().Trim()))
Display();
}
}上边代码我同时启动了10个线程,启动了10个线程排序的速度比启动一个线程的排序速度快了,但是我想知道,当我启动了10个线程的时候,在一个时间段内只有一个线程在执行排序,等它排序结束后,这个时候排序工作已经结束了,别的线程执行的时候还有什么意义呢,因为排序工作结束了啊,它再排序就没有用了啊?

解决方案 »

  1.   

    在我们的写的程序中,在没加入Thread类的时候,是不是还有线程呢?
    ------------------
    有主线程
      

  2.   

    你的排序算法采用的是冒泡的方式,for选还结束表示已经执行完了一次冒泡,此时实现了最大的数移到了数组的最后一位,此时由于Thread.Sleep(1),当前线程被挂起,其他任务(很有可能是另一个排序的线程,假定为线程2)将被激活,此时线程2开始执行,并进入执行for循环,则将又执行一次冒泡,当for循环结束时,数组中的次最大值将肯定被移到数组最后位的前一位了,然后Thread.Sleep(1),线程2又被挂起,然后又有新的线程继续执行一次冒泡的过程,,如此循环。