• C#中Random


    说明:C#中的随机数是一个伪随机数,随机数字从一组有限的数字选择以相同的概率,所选的数字不是完全随机的,因为使用数学算法来选择它们。在大多数Windows系统中,Random的15毫秒内创建的对象很可能会有相同的种子值,Random类不是线程安全,若要避免此问题,请创建一个Random对象而不是多个对象,可以把这个random对象写成静态的。

    例子

    ``` C#  多个new对象
    List<Task> tasks = new List<Task>();
    for (int i = 0; i < 10; i++) {
        
        var t = Task.Run(() =>
        {
            var a = new Random();
            Console.WriteLine(a.Next());
        });
        tasks.Add(t);
    }
    
    Task.WaitAll(tasks.ToArray());
    
    //结果
    //1522489488
    //145533769
    //1941645525
    //1941645525
    //1941645525
    //1941645525
    //1941645525
    //1941645525
    //1941645525
    //1941645525
    ```
    
    ``` C# 一个对象
    var a = new Random();
    List<Task> tasks = new List<Task>();
    for (int i = 0; i < 10; i++) {
        
        var t = Task.Run(() =>
        {
            Console.WriteLine(a.Next());
        });
        tasks.Add(t);
    }
    
    Task.WaitAll(tasks.ToArray());
    //结果
    //2096161011
    //1984131754
    //349870744
    //1887940592
    //2036172948
    //583109263
    //603018983
    //907326994
    //25452174
    //901934441
    ```

    结论

    当有多线程访问的时候,不要在线程中使用new对象,或者写成static

    微软Random源码地址

    https://referencesource.microsoft.com/#mscorlib/system/random.cs,dec894a7e816e665

  • 相关阅读:
    delphi 调用百度地图api
    Delphi XE5 for android 图片缩放和拖动处理
    利用FMX控件的MakeScreenshot过程实现WAIT效果
    老外写的在桌面添加快捷方式(DELPHI XE5 ANDROID)
    第01组 Alpha冲刺(5/6)
    2019 SDN上机第4次作业
    2019 SDN阅读作业
    第01组 Alpha冲刺(4/6)
    第01组 Alpha冲刺(3/6)
    第01组 Alpha冲刺(2/6)
  • 原文地址:https://www.cnblogs.com/zhao123/p/10942310.html
Copyright © 2020-2023  润新知