Java随机 Java真随机,
分享于 点击 45890 次 点评:269
Java随机 Java真随机,
最近发现java自带的随机函数是可以遇见的,自己就根据随机的理解利用cpu和时间的随机种子写了一个随机类,希望对你有所启发!!!
不说这么多了直接上源码:
public class Random {
public static void main(String[] args) {
Random r = new Random((short) 100);
for (int i = 0; i < 50; i++) {
try {
System.out.println(r.next());
} catch (Exception e) {
e.printStackTrace();
}
}
}
private short r=0 ;//随机对象范围
private boolean isCall =false ;
private boolean isCall2 =false ;
public Random (short r){
this.r=r;
}
Object obj = new Object();
public int next() throws Exception{
isCall =false ;
isCall2 =false ;
RandomRunnable rr1= new RandomRunnable(new Call() {
//启动线程后通知
@Override
void call() {
isCall=true;
synchronized (obj){
obj.notify();
}
}
});
RandomRunnable rr2= new RandomRunnable(new Call() {
//启动线程后通知
@Override
void call() {
isCall2=true;
synchronized (obj){
obj.notify();
}
}
});
//启动子线程
new Thread(rr1).start();
new Thread(rr2).start();
//等待子线程启动挑出来
while(!isCall || !isCall2){
synchronized (obj) {
obj.wait();
}
}
long c = System.nanoTime();
int t = (int) (c%2 +1);
//睡眠1毫秒等运算好
// Thread.sleep(1l);
//停止线程运算获取相关值
//停止线程运算获取相关值
int j1 =rr1.endRunnable();
int j2 =rr2.endRunnable();
if(j1==0)
j1=j2;
if(j2==0)
j2=j1;
int j =0;
//获取线程运算的数字
switch (t) {
case 1:
j=j1;
break;
case 2:
j=j2;
break;
default:
break;
}
return j%(r+1);
}
}
class RandomRunnable implements Runnable{
private int j =0;
private Call call;
private boolean b = true;
public RandomRunnable(Call call){
this.call = call;
}
@Override
public void run() {
call.call();
while (b&&j<10000000) {
j++;
}
}
public int endRunnable(){
b=false;
// System.out.println(j);
return j;
}
}
abstract class Call{
//运行线程了告诉主线程
abstract void call();
}
运行结果相关文章
- 暂无相关文章
用户点评