zoukankan      html  css  js  c++  java
  • 多线程的几个相关案例

    多线程的几个相关案例

    案例一:

    代码:

      public static void Test2()
            {
                for (int i = 0; i < 10; i++)
                {
                    Task.Factory.StartNew(() => Console.WriteLine($"{Thread.CurrentThread.ManagedThreadId} ~ {i}"));
                }
            }

    结果:

    分析:

    上述结果,可以看出我们预期是打印1~10,但实际的打印结果是上图,原因是这几个lambda表达式中使用了同一个变量,并且这些匿名函数共享变量值。

     

    案例二:

    代码:

       public static void Test3()
            {
                Action<int> displayNumber = n => Console.WriteLine(n);
                int i = 5;
                Task taskOne = Task.Factory.StartNew(() => displayNumber(i));
                i = 7;
                Task taskTwo = Task.Factory.StartNew(() => displayNumber(i));
                Task.WaitAll(taskOne, taskTwo);
            }

    结果:

    分析:

    当闭包通过lambda表达式捕获可变变量时,lambda捕获变量的引用,而不是捕获该变量的当前值。因此,如果任务在变量的引用值更改后运行,则该值将是内存中最新的值,而不是捕获变量时的值。

     

    案例三:

    代码:

     public static void Test5()
            {
                Parallel.For(0, 10, n => Console.WriteLine($" {Thread.CurrentThread.ManagedThreadId} ~ {n}"));
            }

    结果:

    分析:

    Parallel.For执行时无顺序的。


    技术的发展日新月异,随着时间推移,无法保证本博客所有内容的正确性。如有误导,请大家见谅,欢迎评论区指正!
    我创建了一个.NET开发交流群,用于分享学习心得和讨论相关技术难题。欢迎有兴趣的小伙伴扫码入群,相互学习!

  • 相关阅读:
    [Swift]LeetCode300. 最长上升子序列 | Longest Increasing Subsequence
    备忘录模式之C++实现
    leecode 题解 || Merge k Sorted Lists 问题
    数学三大危机
    singlefile.py
    Data Url生成工具之HTML5 FileReader实现
    算法题:打印1到最大的n位数
    java.lang.NoClassDefFoundError: org/apache/commons/lang/xwork/StringUtils
    hdu 1181 变形课
    postgis经常使用函数介绍(一)
  • 原文地址:https://www.cnblogs.com/wml-it/p/14797079.html
Copyright © 2011-2022 走看看