C#中关于多线程编程的示例代码

先来看看使用Thread类来实现多线程,示例代码如下:

注意:

可以通过workerThread.Priority = ThreadPriority.X设置线程的优先级。

ThreadPriority是个枚举类型,包括:Highest,AboveNormal,Normal,BelowNormal和Lowest。

一般当前线程(Thread.CurrentThread)被默认设置成Normal。

不过如今的CPU都已经相当的快了,上例中即便把workerThread.Priority = ThreadPriority.Highest;当输入的数字很小,譬如输入1,也就是运算量较小的时候,主线程也能顺利的抢在Work线程之前完成任务的。但是随便interval设置值增大,情况就有所不同了。

 

 

再来看看如何使用ThreadPool创建线程:

使用Thread类来创建线程是很昂股的(CPU密集型)。所以CLR提供了线程池来供应用程序使用,演示代码如下:

注意:

使用WaitCallback委托时还可以传送一个参数,例如把上面的代码改成:

ThreadPool.QueueUserWorkItem(new WaitCallback(StartMethod), "First Thread");
Thread.Sleep(100);
ThreadPool.QueueUserWorkItem(new WaitCallback(StartMethod), "Second Thread");
Console.ReadLine();

接着在StartMethod里可以使用它,例如;

static void StartMethod(Object stateInfo)
{
        //DisplayNumbers("Thread " + DateTime.Now.Millisecond.ToString());
        DisplayNumbers("Thread " + stateInfo.ToString());
        Console.WriteLine("Thread Finished");
}

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
多个C#多线程开发实例 using System; using System.Collections.Generic; using System.Text; namespace Example20 { class Program { class Class1 : IDisposable { //析构函数,编译后变成 protected void Finalize(),GC会在回收对象前会调用调用该方法 ~Class1() { Dispose(false); } //通过实现该接口,客户可以显式地释放对象,而不需要等待GC来释放资源,据说那样会降低效率 void IDisposable.Dispose() { Dispose(true); } //将释放非托管资源设计成一个虚函数,提供在继承类释放基类的资源的能力 protected virtual void ReleaseUnmanageResources() { //Do something... } //私有函数用以释放非托管资源 private void Dispose(bool disposing) { ReleaseUnmanageResources(); //为true时表示是客户显式调用了释放函数,需通知GC不要再调用对象的Finalize方法 //为false时肯定是GC调用了对象的Finalize方法,所以没有必要再告诉GC你不要调用我的Finalize方法啦 if (disposing) { GC.SuppressFinalize(this); } } } static void Main(string[] args) { //tmpObj1没有手工释放资源,就等着GC来慢慢的释放它吧 Class1 tmpObj1 = new Class1(); //tmpObj2调用了Dispose方法,传说比等着GC来释放它效率要调一些 //个人认为是因为要逐个对象的查看其元数据,以确认是否实现了Dispose方法吧 //当然最重要的是我们可以自己确定释放的时间以节省内存,优化程序运行效率 Class1 tmpObj2 = new Class1(); ((IDisposable)tmpObj2).Dispose(); } } }
以下是一个使用异步多线程的简单示例: ```csharp using System; using System.Threading; using System.Threading.Tasks; class Program { static async Task Main() { // 使用异步编程模型创建并发执行的异步任务 Task task1 = Task.Run(async () => { await Task.Delay(1000); // 模拟耗时操作 Console.WriteLine("任务1完成"); }); Task task2 = Task.Run(async () => { await Task.Delay(2000); // 模拟耗时操作 Console.WriteLine("任务2完成"); }); // 使用多线程创建并发执行的任务 Thread thread1 = new Thread(() => { Thread.Sleep(3000); // 模拟耗时操作 Console.WriteLine("任务3完成"); }); Thread thread2 = new Thread(() => { Thread.Sleep(4000); // 模拟耗时操作 Console.WriteLine("任务4完成"); }); // 启动异步任务和线程 task1.Start(); task2.Start(); thread1.Start(); thread2.Start(); // 等待所有任务和线程完成 await Task.WhenAll(task1, task2); thread1.Join(); thread2.Join(); Console.WriteLine("所有任务和线程已完成"); } } ``` 在上面的示例,我们使用异步编程模型创建了两个异步任务(task1 和 task2),并使用多线程创建了两个线程(thread1 和 thread2)。每个任务和线程都模拟了一些耗时操作。 通过调用 Start() 方法启动异步任务和线程,并使用 await Task.WhenAll() 方法等待所有任务和线程完成。最后输出 "所有任务和线程已完成"。 这个示例展示了如何同时使用异步编程模型和多线程来实现异步多线程。你可以根据自己的需求修改和扩展代码。 希望这个示例对你有所帮助。如果你还有其他问题,请随时提问。

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值