我有執行緒問題。我正在使用三個物件運行“run”方法,每個物件都在不同的執行緒中。
是否可以從三個執行緒中獲得相同的數字?我認為答案是否定的,但有可能經過一些改變嗎?
主要的:
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();
}
班級:
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);
}
}
uj5u.com熱心網友回復:
當然。每個執行緒創建一個實體,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();
}
班級:
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成為一個欄位而不是讓一個欄位seed單獨存盤對我來說更有意義。
轉載請註明出處,本文鏈接:https://www.uj5u.com/qiye/400901.html
