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