zoukankan      html  css  js  c++  java
  • c# 多线程传值注意的地方

    前言

    下面介绍多线程传值的几种方式,并说明注意点。

    正文

    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,如果值是变量,那么我们应该考虑的是方法在线程开始的时候变量是否产生变化。

  • 相关阅读:
    RIA Animation test.
    深入浅出REST
    HTTP header中的 Cachecontrol
    Silverlight操纵html元素
    Comparing Azure storage and SQL Data Services
    SharePoint 2010 集成Window Live 认证遇到的问题 part 2
    SharePoint2010 此工作簿未存储在 Excel Services 应用程序 中受信任的位置,因此无法打开。
    SharePoint2010 使用Designer开发工作流 如何引用其他列表的查阅项
    SharePoint 2010 item级的权限控制
    Infopath 2010 如何设计虚线底框应用于合同中的输入框
  • 原文地址:https://www.cnblogs.com/aoximin/p/13213443.html
Copyright © 2011-2022 走看看