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

例子

``` C#  多个new对象
List<Task> tasks = new List<Task>();
for (int i = ; i < ; 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
//
``` ``` C# 一个对象
var a = new Random();
List<Task> tasks = new List<Task>();
for (int i = ; i < ; 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
//
```

结论

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

微软Random源码地址

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

最新文章

  1. 隐藏NavigationBar的正确方式
  2. sqlmap的学习以及使用
  3. HTTP Servlet 重要的几个方法
  4. SQLAlchemy Core中的异常及事务处理样码
  5. fast-framework – 基于 JDK 8 实现的 Java Web MVC 框架
  6. POJ3648 A Simple Problem with Integers(线段树之成段更新。入门题)
  7. das,nas,san区别——大型数据中心会用NAS+SAN软硬结合思路
  8. FloatingActionButton的一点学习感悟
  9. asp.net字符串分割函数用法
  10. zoj 1760 floyd构图+Dinic最大流
  11. JavaScript基础知识(学习笔记)
  12. 行变列 pivot
  13. UVA LA 7146 2014上海亚洲赛(贪心)
  14. hdoj 2222
  15. 基于webuploader.js的单图片上传封装
  16. ●洛谷P1903 [国家集训队]数颜色
  17. 论文阅读笔记三:R2CNN:Rotational Region CNN for Orientation Robust Scene Text Detection(CVPR2017)
  18. e777. 获得JList组件的所有项
  19. SAX,功能强大的 API
  20. Effective STL 笔记 -- Item 6 ~ 7: Container and Object Pointer

热门文章

  1. Go:闭包
  2. db2 group by的疑惑。
  3. 移动端禁止滑动的js处理方式
  4. STM32单片机串口一键下载电路与操作方法详解
  5. pogresql基础学习笔记
  6. 【hdu 1043】Eight
  7. VS2017 +NetCore2.2.0+WebApi项目整合SwaggerUI 以及遇到的坑
  8. Visual Assist X破解版安装(vs2010助手)
  9. 一场BC的台前幕后
  10. 虚拟化(二):虚拟化及vmware workstation产品使用