• 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

  • 相关阅读:
    QuickSort
    Java细节
    Java
    Prime
    apache和tomcat有什么不同,为什么要整合apache 和tomcat?
    java线程面试题及答案
    Struts2中的ModelDriven机制及其运用
    Java中instanceof关键字的用法总结
    spring特点与好处
    spring与struts有什么区别?
  • 原文地址:https://www.cnblogs.com/zhao123/p/10942310.html
Copyright © 2020-2023  润新知