c# 多线程传值注意的地方
2023-09-14 09:01:09 时间
前言
下面介绍多线程传值的几种方式,并说明注意点。
正文
static void Main(string[] args)
{
SampleTread thead = new SampleTread(10);
var theadone = new Thread(thead.CountNumbers);
theadone.Start();
theadone.Join();
Console.WriteLine("---------------------");
var threadTwo = new Thread(Count);
threadTwo.Name = "TheadTwo";
threadTwo.Start(8);
threadTwo.Join();
Console.WriteLine("---------------------");
var ThreadThree = new Thread(() => CountNumbers(12));
ThreadThree.Name = "ThreadThree";
ThreadThree.Start();
ThreadThree.Join();
Console.WriteLine("------------------");
int i = 10;
var threadFour = new Thread(() => printNumber(i));
i = 20;
var threadFive = new Thread(() => printNumber(i));
threadFour.Start();
threadFive.Start();
}
static void Count(object iterations)
{
CountNumbers((int)iterations);
}
static void CountNumbers(int iterations)
{
for (int i = 0; i < iterations; i++)
{
Thread.Sleep(TimeSpan.FromSeconds(0.5));
Console.WriteLine($"{Thread.CurrentThread.Name}print{i}");
}
}
static void printNumber(int number)
{
Console.WriteLine(number);
}
class SampleTread
{
private readonly int _iterations;
public SampleTread(int iterations)
{
this._iterations = iterations;
}
public void CountNumbers()
{
for (int i = 0; i < _iterations; i++)
{
Thread.Sleep(TimeSpan.FromSeconds(0.5));
Console.WriteLine($"{ Thread.CurrentThread.Name}print{i}");
}
}
}
上文介绍了两种方式,一种是在thread的实例化时候传递的,另一种是在start 的时候传递的。
一个参数是const,而另一种参数是变量,对比这两种方式的不同。
可以跑一下是否和心中所想的是否一样。
注意点
一切运行的时候应该以start值为主:
int i = 10;
var threadFour = new Thread(() => printNumber(i));
i = 20;
var threadFive = new Thread(() => printNumber(i));
threadFour.Start();
threadFive.Start();
打印的结果都是20,如果值是变量,那么我们应该考虑的是方法在线程开始的时候变量是否产生变化。
相关文章
- C# 多线程编程
- C# 多线程 Parallel.ForEach 和 ForEach 效率问题研究及理解
- c# mysql executenonquery_C#与数据库访问技术总结(八)之ExecuteNonQuery方法
- C# 多线程与线程扫描器
- 【愚公系列】2023年01月 .NET/C#知识点-LINQ和lambda实现左、右、内链接
- 【C#异步】异步多线程的本质,上下文流转和同步
- C#多线程的几种实现方法详解编程语言
- C#参数的按值传递和按引用传递
- 用C#操纵IIS(代码)
- C#多线程Singleton(单件)模式模板
- C#根据ip获取城市等相关信息
- c#遍历System.drawing.Color下面的所有颜色以及名称以查看
- C#禁用鼠标中间键的方法
- 浅解关于C#多线程的介绍
- C#中动态显示当前系统时间的实例方法
- 怎么利用c#修改services的Startuptype
- c#调用api控制windows关机示例(可以重启/注销)
- c#友好显示日期c#日期datetime使用方法
- c#多线程中Lock()关键字的用法小结
- C#中struct和class的区别详解
- C#中string用法实例详解