📜  C#多线程(1)

📅  最后修改于: 2023-12-03 15:00:17.358000             🧑  作者: Mango

C#多线程

C#是一门流行的编程语言之一。它提供了许多支持多线程的功能,这使得开发人员可以更轻松地为他们的应用程序添加并发能力。在这篇文章中,我们将探讨一些关于C#多线程的重要概念。

Thread类

Thread类是C#中用于创建和控制线程的主要类。使用它可以创建新线程、启动线程、等待线程完成、挂起和恢复线程、设置优先级等。下面是一个简单的示例:

using System;
using System.Threading;

public class Example
{
    public static void Main()
    {
        // 创建一个新线程
        Thread t = new Thread(new ThreadStart(DoWork));
        // 启动线程
        t.Start();

        // 等待线程完成
        t.Join();

        Console.WriteLine("All done!");
    }

    static void DoWork()
    {
        Console.WriteLine("Working...");
        Thread.Sleep(5000);
        Console.WriteLine("Done!");
    }
}

上述代码创建了一个新线程,并在该线程上运行一个名为“DoWork”方法。然后,该代码等待线程完成,并在主线程中输出“All done!”。

Lambda表达式

Lambda表达式是一种简洁的方式来定义匿名方法。在C#中,它们广泛使用在多线程编程中。下面是一个示例:

using System;
using System.Threading;

public class Example
{
    public static void Main()
    {
        // 创建一个新线程
        Thread t = new Thread(() => {
            Console.WriteLine("Working...");
            Thread.Sleep(5000);
            Console.WriteLine("Done!");
        });

        // 启动线程
        t.Start();

        // 等待线程完成
        t.Join();

        Console.WriteLine("All done!");
    }
}

上述代码执行与之前相同的操作,但使用了Lambda表达式来定义线程上的方法。

线程池

线程池是C#中用于管理线程的重要机制之一。它可以尽量避免在代码中创建和销毁线程的开销,并使得应用程序更快、更可靠、更易于开发和维护。下面是一个使用线程池的示例:

using System;
using System.Threading;

public class Example
{
    public static void Main()
    {
        // 在线程池上运行一个操作
        ThreadPool.QueueUserWorkItem(state => {
            Console.WriteLine("Working...");
            Thread.Sleep(5000);
            Console.WriteLine("Done!");
        });

        // 继续执行主线程
        Console.WriteLine("Running in the main thread...");

        Console.ReadLine();
    }
}

上述代码在线程池上运行了一个操作,并在主线程上输出“Running in the main thread...”。当该操作完成时,它将输出“Working...”和“Done!”。

在多线程编程中,锁是用于确保多个线程不同时访问共享资源的机制。在C#中,锁是通过lock语句来实现的。下面是一个示例:

using System;
using System.Threading;

public class Example
{
    static int counter = 0;
    static object obj = new object();

    public static void Main()
    {
        // 创建5个线程来增加计数器
        for (int i = 0; i < 5; i++)
        {
            Thread t = new Thread(() => {
                for (int j = 0; j < 100000; j++)
                {
                    lock (obj)
                    {
                        counter++;
                    }
                }
            });

            t.Start();
        }

        // 等待所有线程完成
        Thread.Sleep(5000);

        Console.WriteLine("Counter value: {0}", counter);
    }
}

上述代码创建了5个线程,每个线程都使用锁来增加一个计数器的值。当所有线程完成时,它输出计数器的值。

总结

本文介绍了一些关于C#多线程的重要概念,例如Thread类、Lambda表达式、线程池和锁。我们希望这篇文章能够帮助你更了解C#多线程,并在应用程序中更有效地使用它们。