一个多线程程序
来源:互联网 发布:javascript decodeuri 编辑:程序博客网 时间:2024/05/16 07:46
这个程序会让你深刻的体会时间片,线程的优先级!!!建议多测试这个程序,一定要看下面的注。
using System;
using System.Collections.Generic;
using System.Text;
using System.Threading;
namespace 一个多线程程序
{
class ThreadApp
{
static int interval;
//static long interval; //你可以换成long测试过10亿单位级的数字
static void DisplayNumbers()
{
//获取当前运行线程的Thread对象实例
Thread thisThread = Thread.CurrentThread;
Console.WriteLine("线程: " + thisThread.Name + " 已开始运行.");
//循环计数直到结束,在指定的间隔输出当前计数值
for (int i = 1; i <= 8 * interval; i++)
{
if (i % interval == 0)
{
Console.WriteLine(thisThread.Name + ": 当前计数为 " + i);
}
}
Console.WriteLine("线程 " + thisThread.Name + " 完成.");
}
static void Main(string[] args)
{
Console.Write("请输入一个数字:");
interval = long.Parse(Console.ReadLine());//获取用户输入的数字
//定义当前主线程线程对象的名字
Thread thisThread = Thread.CurrentThread;
thisThread.Name = "Main Thread";
//建立新线程对象
ThreadStart workerStart = new ThreadStart(DisplayNumbers);
Thread workerThread = new Thread(workerStart);
workerThread.Name = "Worker Thread"; //设置线程名字
//如果输入的数字相对比较大(不一定很大),同时包裹下面这条语句,那么workerThread线程早完成的概率就大
//workerThread.Priority = ThreadPriority.AboveNormal;
workerThread.IsBackground = true; //把workerThread线程设置为后台线程。这个属性似乎不影响线程进入自己时间片的时间
workerThread.Start(); //启动新线程
DisplayNumbers(); //主线程同步进行计数 即为了Main()方法这个主线程计数
Console.WriteLine("UESTC_Terry");//和下面等价,几乎和下面的那条语句同时执行
ThreadApp.MyMethod();//和上面等价,几乎和上面的那条语句同时执行
Console.ReadLine();
}
private static void MyMethod()
{
Console.WriteLine("UESTC_Terry");
}
}
}
/*
注:Main()方法总是应用程序的第一个线程,因为第一个线程是由.net的运行库开始执行的。
所以程序一启动就相当于启动了Main()线程,从而不需要显示的调用Start()方法。而后续的
线程由应用程序在内部启动,即应用程序可以选择启动哪个线程。所以必须要调用Start()方法
来启动相应的线程。
*/
/*
注:由于Windows是一个抢先式多任务处理的操作系统。所以Windows会在某个进程中选择一个线程,该线程运行完它的
一个时间片后,Windows就会收回控制权,选择下一个被分配时间片的线程。这些时间片非常短(估计不超过几毫秒)
所以造成上面这个程序会因输入数字大小的不同,执行结果大有不同。这正体现了时间片这个思想。
*/
/*
注:建议一定多测试这个程序,多换些数字来测试,从小到大,int类型不行,就long类型,测试多了,就会对时间片有
更加深刻的理解。
*/
using System.Collections.Generic;
using System.Text;
using System.Threading;
namespace 一个多线程程序
{
class ThreadApp
{
static int interval;
//static long interval; //你可以换成long测试过10亿单位级的数字
static void DisplayNumbers()
{
//获取当前运行线程的Thread对象实例
Thread thisThread = Thread.CurrentThread;
Console.WriteLine("线程: " + thisThread.Name + " 已开始运行.");
//循环计数直到结束,在指定的间隔输出当前计数值
for (int i = 1; i <= 8 * interval; i++)
{
if (i % interval == 0)
{
Console.WriteLine(thisThread.Name + ": 当前计数为 " + i);
}
}
Console.WriteLine("线程 " + thisThread.Name + " 完成.");
}
static void Main(string[] args)
{
Console.Write("请输入一个数字:");
interval = long.Parse(Console.ReadLine());//获取用户输入的数字
//定义当前主线程线程对象的名字
Thread thisThread = Thread.CurrentThread;
thisThread.Name = "Main Thread";
//建立新线程对象
ThreadStart workerStart = new ThreadStart(DisplayNumbers);
Thread workerThread = new Thread(workerStart);
workerThread.Name = "Worker Thread"; //设置线程名字
//如果输入的数字相对比较大(不一定很大),同时包裹下面这条语句,那么workerThread线程早完成的概率就大
//workerThread.Priority = ThreadPriority.AboveNormal;
workerThread.IsBackground = true; //把workerThread线程设置为后台线程。这个属性似乎不影响线程进入自己时间片的时间
workerThread.Start(); //启动新线程
DisplayNumbers(); //主线程同步进行计数 即为了Main()方法这个主线程计数
Console.WriteLine("UESTC_Terry");//和下面等价,几乎和下面的那条语句同时执行
ThreadApp.MyMethod();//和上面等价,几乎和上面的那条语句同时执行
Console.ReadLine();
}
private static void MyMethod()
{
Console.WriteLine("UESTC_Terry");
}
}
}
/*
注:Main()方法总是应用程序的第一个线程,因为第一个线程是由.net的运行库开始执行的。
所以程序一启动就相当于启动了Main()线程,从而不需要显示的调用Start()方法。而后续的
线程由应用程序在内部启动,即应用程序可以选择启动哪个线程。所以必须要调用Start()方法
来启动相应的线程。
*/
/*
注:由于Windows是一个抢先式多任务处理的操作系统。所以Windows会在某个进程中选择一个线程,该线程运行完它的
一个时间片后,Windows就会收回控制权,选择下一个被分配时间片的线程。这些时间片非常短(估计不超过几毫秒)
所以造成上面这个程序会因输入数字大小的不同,执行结果大有不同。这正体现了时间片这个思想。
*/
/*
注:建议一定多测试这个程序,多换些数字来测试,从小到大,int类型不行,就long类型,测试多了,就会对时间片有
更加深刻的理解。
*/
- 一个多线程程序
- 一个多线程程序
- 一个多线程演示程序
- vc多线程的一个程序
- 一个多线程计算矩阵程序
- 一个多线程程序挂起问题解决
- 一个多线程程序挂起问题解决
- 一个多线程刷页面的程序
- 一个多线程的web服务器程序
- java多线程SOCKET程序的一个问题
- 多线程实现的一个小程序
- 一个多线程示例程序的BUG修复
- MAC COCOA一个简单的多线程程序
- 使用多线程方法生成一个死锁程序
- 多线程 —— 一个“危险”的程序
- 利用多线程写一个卖票程序
- 一个控制台程序中的日志产生程序(运用多线程)
- C#多线程实战--一个写程序,多个读程序
- C C++头文件一览
- Torvalds谈Linux在2008年的发展
- 常用jdbc连接字符串
- TypeMock测试编写心得
- 线程的创建和启动
- 一个多线程程序
- 网页上生成一个印章。
- javascript select work
- 给大家看一个好程序
- Hibernate中检索策略
- hibernate延迟加载
- 对session对象在web开发中的创建以及sessionId生成并返回客户端的运行机制.
- proxy-lazy机制
- 测试 hibernate 性能 驱动 jdbc 数据库 版本 数据