是这样的,我做了一个线程池的例子,创建了三个线程。
运行后在任务管理器发现这个应用程序只有一个运行线程!
我只知道线程池可以减少线程的数量,但为什么只有一个呀?using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using System.Threading;
namespace Prog
{
class ThreadPoolDemo
{
public void LongTask1(object obj)
{
for (int i = 0; i <= 999; i++)
{
Console.WriteLine("Long Task1 is being executed");
}
} public void LongTask2(object obj)
{
for (int i = 0; i <= 999; i++)
{
Console.WriteLine("Long Task2 is being executed");
}
} public void LongTask3(object obj)
{
for (int i = 0; i <= 999; i++)
{
Console.WriteLine("Long Task2 is being executed");
}
}
static void Main(string[] args)
{
ThreadPoolDemo tpd = new ThreadPoolDemo();
for (int i = 0; i < 50; i++)
{
ThreadPool.QueueUserWorkItem(new WaitCallback(tpd.LongTask1));
ThreadPool.QueueUserWorkItem(new WaitCallback(tpd.LongTask2));
ThreadPool.QueueUserWorkItem(new WaitCallback(tpd.LongTask3));
}
Console.Read();
}
}
}
运行后在任务管理器发现这个应用程序只有一个运行线程!
我只知道线程池可以减少线程的数量,但为什么只有一个呀?using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using System.Threading;
namespace Prog
{
class ThreadPoolDemo
{
public void LongTask1(object obj)
{
for (int i = 0; i <= 999; i++)
{
Console.WriteLine("Long Task1 is being executed");
}
} public void LongTask2(object obj)
{
for (int i = 0; i <= 999; i++)
{
Console.WriteLine("Long Task2 is being executed");
}
} public void LongTask3(object obj)
{
for (int i = 0; i <= 999; i++)
{
Console.WriteLine("Long Task2 is being executed");
}
}
static void Main(string[] args)
{
ThreadPoolDemo tpd = new ThreadPoolDemo();
for (int i = 0; i < 50; i++)
{
ThreadPool.QueueUserWorkItem(new WaitCallback(tpd.LongTask1));
ThreadPool.QueueUserWorkItem(new WaitCallback(tpd.LongTask2));
ThreadPool.QueueUserWorkItem(new WaitCallback(tpd.LongTask3));
}
Console.Read();
}
}
}
可能是执行的太快了
用 Sleep 多睡一会儿
如果不用线程池,则线程数可以达到几十个!using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using System.Threading;
namespace Prog
{
class ThreadDemo
{
public void LongTask1()
{
for (int i = 0; i <= 999; i++)
{
Console.WriteLine("Long Task1 is being executed");
}
} public void LongTask2()
{
for (int i = 0; i <= 999; i++)
{
Console.WriteLine("Long Task2 is being executed");
}
} public void LongTask3(object obj)
{
for (int i = 0; i <= 999; i++)
{
Console.WriteLine("Long Task2 is being executed");
}
}
static void Main(string[] args)
{
ThreadDemo thread = new ThreadDemo();
for (int i = 0; i < 50; i++)
{
Thread t1 = new Thread(new ThreadStart(thread.LongTask1));
t1.Start();
Thread t2 = new Thread(new ThreadStart(thread.LongTask2));
t2.Start(); }
Console.Read();
}
}
}