随机数和线程
Random number and threads
线程有问题。我正在 运行ning“运行”方法使用三个对象,每个对象在不同的线程中。
是否可以从三个线程中获取相同的数字?我认为答案是否定的,但经过一些改变是否可能?
主要:
public static void main(String[] args) {
Test w1,w2,w3;
w1 = new Test(1);
w2 = new Test(2);
w3 = new Test(3);
w1.start();
w2.start();
w3.start();
}
class:
public class Test extends Thread implements Runnable{
int number;
public Test(int number) {
this.number = number;
}
@Override
public void run() {
Random rnd = new Random();
//int pom = ThreadLocalRandom.current().nextInt(101);
int pom = rnd.nextInt(101);
System.out.println("Random number: "+pom+", number of thread: "+number);
}
}
当然可以。每个线程创建一个 Random
的实例,然后从中提取相同数量的字节(即:0 到 100 之间的 1 个整数)。因此,如果它们都是相同的随机序列,你会得到相同的结果。
用设置的种子值将它们全部初始化,你就会得到你想要的。如果你愿意,你可以这样做,这样每次调用这个过程,你都会得到一个不同的种子值(所以,随机种子),但是所有的随机数 运行 同样的方式:
主要:
public static void main(String[] args) {
Test w1,w2,w3;
long seed = new Random().nextLong();
w1 = new Test(1, seed);
w2 = new Test(2, seed);
w3 = new Test(3, seed);
w1.start();
w2.start();
w3.start();
}
class:
public class Test extends Thread {
private final int number;
private final Random rnd;
public Test(int number, long seed) {
this.number = number;
this.rnd = new Random(seed);
}
@Override
public void run() {
int pom = rnd.nextInt(101);
System.out.println("Random number: "+pom+", number of thread: "+number);
}
}
我还清理了一些样式问题(private final
在字段上,让 Random
的实例成为一个字段而不是一个字段来存储 Random
对我来说更有意义=15=]分开。
线程有问题。我正在 运行ning“运行”方法使用三个对象,每个对象在不同的线程中。
是否可以从三个线程中获取相同的数字?我认为答案是否定的,但经过一些改变是否可能?
主要:
public static void main(String[] args) {
Test w1,w2,w3;
w1 = new Test(1);
w2 = new Test(2);
w3 = new Test(3);
w1.start();
w2.start();
w3.start();
}
class:
public class Test extends Thread implements Runnable{
int number;
public Test(int number) {
this.number = number;
}
@Override
public void run() {
Random rnd = new Random();
//int pom = ThreadLocalRandom.current().nextInt(101);
int pom = rnd.nextInt(101);
System.out.println("Random number: "+pom+", number of thread: "+number);
}
}
当然可以。每个线程创建一个 Random
的实例,然后从中提取相同数量的字节(即:0 到 100 之间的 1 个整数)。因此,如果它们都是相同的随机序列,你会得到相同的结果。
用设置的种子值将它们全部初始化,你就会得到你想要的。如果你愿意,你可以这样做,这样每次调用这个过程,你都会得到一个不同的种子值(所以,随机种子),但是所有的随机数 运行 同样的方式:
主要:
public static void main(String[] args) {
Test w1,w2,w3;
long seed = new Random().nextLong();
w1 = new Test(1, seed);
w2 = new Test(2, seed);
w3 = new Test(3, seed);
w1.start();
w2.start();
w3.start();
}
class:
public class Test extends Thread {
private final int number;
private final Random rnd;
public Test(int number, long seed) {
this.number = number;
this.rnd = new Random(seed);
}
@Override
public void run() {
int pom = rnd.nextInt(101);
System.out.println("Random number: "+pom+", number of thread: "+number);
}
}
我还清理了一些样式问题(private final
在字段上,让 Random
的实例成为一个字段而不是一个字段来存储 Random
对我来说更有意义=15=]分开。