在C#中, 多线程系统基于Thread类构建, 该类封装了线程的执行。此类包含一些有助于管理和创建线程的方法和属性, 该类在下面定义系统线程命名空间。的系统线程名称空间提供了在多线程编程中使用的类和接口。
此命名空间中一些常用的类是:
类名称 | 描述 |
---|---|
Mutex | 它是一个同步原语, 也可以用于IPS(进程间同步)。 |
Monitor | 此类提供了一种以同步方式访问对象的机制。 |
Semaphore | 此类用于限制可以同时访问资源或资源池的线程数。 |
Thread | 此类用于创建和控制线程, 设置其优先级并获取其状态。 |
ThreadPool | 此类提供了一个线程池, 该线程池可用于执行任务, 发布工作项, 处理异步I / O, 代表其他线程等待以及处理计时器。 |
ThreadLocal | 此类提供线程本地数据存储。 |
Timer | 此类提供了一种机制, 用于以指定的时间间隔在线程池线程上执行方法。不允许你继承此类。 |
Volatile | 此类包含用于执行易失性存储器操作的方法。 |
首先导入System.Threading名称空间, 它在你的程序中创建线程中起着重要作用, 因为你无需每次都编写类的完全限定名称。
Using System;
Using System.Threading
现在, 在你的main方法中创建并初始化线程对象。
public static void main()
{
Thread thr = new Thread(job1);
}
Or
你还可以使用ThreadStart构造函数来初始化新实例。
public static void main()
{
Thread thr = new Thread(new ThreadStart(job1));
}
现在, 你可以调用线程对象了。
public static void main()
{
Thread thr = new Thread(job1);
thr.Start();
}
下面的程序说明了上述步骤的实际实现:
示例1:
//C# program to illustrate the
//creation of thread using
//non-static method
using System;
using System.Threading;
public class ExThread {//Non-static method
public void mythread1()
{
for ( int z = 0;
z <
3;
z++) {
Console.WriteLine( "First Thread" );
}
}
}//Driver Class
public class GFG {//Main Method
public static void Main()
{
//Creating object of ExThread class
ExThread obj = new ExThread();
//Creating thread
//Using thread class
Thread thr = new Thread( new ThreadStart(obj.mythread1));
thr.Start();
}
}
输出如下:
First Thread
First Thread
First Thread
说明:在上面的示例中, 我们有一个名为的类执行绪包含一个名为的非静态方法mythread1()。因此, 我们创建了一个实例, 即对象的ExThread类, 并在线程启动此声明中给出的类线程a = new Thread(new ThreadStart(obj.mythread1)); 。使用T读取一个= new Thread(new ThreadStart(obj.mythread1)); 语句, 我们将创建一个名为苏并初始化该线程的工作。通过使用thr.Start(); 声明。
示例2:
//C# program to illustrate the creation
//of thread using static method
using System;
using System.Threading;
public class ExThread {//Static method for thread a
public static void thread1()
{
for ( int z = 0;
z <
5;
z++) {
Console.WriteLine(z);
}
}//static method for thread b
public static void thread2()
{
for ( int z = 0;
z <
5;
z++) {
Console.WriteLine(z);
}
}
}//Driver Class
public class GFG {//Main method
public static void Main()
{
//Creating and initializing threads
Thread a = new Thread(ExThread.thread1);
Thread b = new Thread(ExThread.thread2);
a.Start();
b.Start();
}
}
输出:
0
1
2
3
4
0
1
2
3
4
说明:在上面的示例中, 我们有一个名为的类执行绪并包含两个名为的静态方法线程1()和thread2()。因此, 我们无需创建的实例执行绪类。在这里, 我们使用类名来调用这些方法, 例如ExThread.thread1, ExThread.thread2。通过使用线程a = new Thread(ExThread.thread1); 我们创建并初始化线程工作的语句一种, 对于线程类似b。通过使用a.Start(); 和b.Start(); 陈述, 一种和b计划执行的线程。
注意:这些程序的输出可能会因上下文切换而有所不同。
推荐阅读
- 如何声明一个指向函数的指针()
- 如何在C#中创建ArrayList(用法示例)
- 如何使用Kotlin在Android Studio中创建项目()
- 如何在Google AMP中创建Floating amp-addthis()
- 如何在Tableau中创建故事()
- 10个查找和删除重复文件的工具
- 简单判断是否存在丢包之ping+tracert+mtr
- 关于服务器开启ipv6服务,导致无法访问谷歌
- Docker(CentOS)