作一个积极的人java
编码、改bug、提高本身程序员
我有一个乐园,面向编程,春暖花开!编程
在将来城市工做的的程序员小木,作了一个梦,梦到本身在塔鲁姆的街道上看到一个姑娘,这个姑娘从远处走向他,脸上带着微笑。让小木非常着迷,小木呆呆的望着姑娘从他身边走过,当他回过神来,发现姑娘已经走远,小木赶紧去追这位姑娘,忽然天空中飘下一张字条,上面写着:安全
我一眼就看出你是Java程序员了,当你能用代码实现 520~1314 之间的随机整数,那么我会主动来找你的!bash
小木还很纳闷,为何这个姑娘知道本身是一个程序员,姑娘难道是上天专门派来的吗 ?多线程
小木同窗,见下图:并发
小木很兴奋啊,终于我学的Java编程有用武之处了,这个比写CRUD和看项目留下的烂代码好不少啊,我写好了,姑娘就来找我了。小木大脑开始快速运转,脑神经之间相互发送消息,收集储存起来的数据。dom
几秒以后,小木想到了一个方法,在刚开始学习Java的时候学过一个 Math
类,它里面有一个生成随机数的方法random()
。可是经过Math.random()
获取的随机数是[0,1)之间的double值。注:包含0,但1不包含!性能
那要获取整数,则须要将上面的结果转行成int类型便可。获取[0, 1)之间的int整数。方法以下:学习
double d = Math.random();
// [0, 1)
int love = (int) (d);
复制代码
// randNumber 将被赋值为一个 MIN 和 MAX 范围内的随机数
int randNumber = rand.nextInt(MAX - MIN + 1) + MIN;
复制代码
简单思考:要让值落在520~1314,那么
MAX : 1314
MIN: 520
由于 Math.random()
获取[0, 1),换算公式: (Math.random() * (MAX - MIN)) + MIN
根据公式照葫芦画瓢,小木很快就实现随机 520~1314 的代码了!
double d = Math.random();
// [520, 1314)
int love = (int) (d * (1314-520)) + 520;
复制代码
写完上面的代码后,小木想仍是要检查检查,不能马虎大意,毕竟这关乎姑娘会不会来找本身。代码运行N多遍以后,520是包含了,可是1314 怎么也出现不了!小木很快意识到这问题很严重。没有1314 姑娘找他这件事确定就泡汤了。从新看上面的换算公式, 小木发现公式有点问题,少了个 1 啊!
正确的公式是 : (Math.random() * (MAX - MIN + 1)) + MIN
double d = Math.random();
// [520, 1315)
int love = (int) (d * (1314 - 520 + 1) + 520;
复制代码
这样就完美一点了,随机数就能够包含1314,这样就能够[520,1314]了。
注: 为了方便阅读,括号内就没有直接写出运算后的值。
大脑还处在高速运转的小木,实现了上面的功能后,心想这么容易就能约到姑娘了,这是否是有点太简单了。因而又想还有没有其余办法还能实现此功能呢?又想到了有Math.random()
。不是还有一个Random类
嘛,和Random类
一块儿的还有一个ThreadLocalRandom类
。无论咋,我在用一种方法实现如下,好好表现一下本身也好!
使用Random获取[520, 1314]之间的int整数,Random 对象的nextInt(int)
方法,将生成 [0, int)之间随机取值的整数。根据上面的思路,实现代码以下:
Random random = new Random();
// [520,1315) == [520,1314]
int love = (random.nextInt(1314 - 520 + 1) + 520);
复制代码
小木在上面代码下面备注了以下内容:
一、Random类采用AtomicLong实现,保证多线程的线程安全性,可是多线程并发获取随机数时性能较差。
二、ThreadLocalRandom就实现了,ThreadLocalRandom继承了Random。多线程环境中可使用ThreadLocalRandom做为随机数生成器,ThreadLocalRandom采用了线程局部变量来改善性能。
最后当小木写完代码后,听到早晨的闹钟响了,好梦就这样被闹钟无情的敲碎了,醒来后,小木久久不能忘记梦中的姑娘,想着何时可以再次偶遇!
你期待小木和梦中姑娘的的再次相遇嘛,我真的还期待,说不定一段美妙的爱情火花就会擦出。
最后帮欢哥打波广告: 阿里口碑,杭州,Java工程师,感兴趣的伙伴能够私聊!
谢谢你的阅读,若是您以为这篇博文对你有帮助,请点赞或者喜欢,让更多的人看到!祝你天天开心愉快!
无论作什么,只要坚持下去就会看到不同!在路上,不卑不亢!
愿你我在人生的路上能都变成最好的本身,可以成为一个独挡一面的人
© 天天都在变得更好的阿飞云