2 回答

TA貢獻(xiàn)1951條經(jīng)驗 獲得超3個贊
正如已經(jīng)評論過的,這與多線程無關(guān)。由于數(shù)字是隨機的,因此它們也有可能相同。
如果你想要 2 個不相同的隨機數(shù),你可以這樣做:
//Create List of integers
List<Integer> numberPool = new ArrayList<>();
//Initialize list with numbers from 1 to 1000
for(int num = 1; num <= 1000 ; num++) {
numberPool.add(num);
}
//Randomly shuffle list
Collections.shuffle(numberPool);
//Get first number
System.out.println(numberPool.get(0));
//Get second number
System.out.println(numberPool.get(1));
如果你想以多線程方式訪問 numberPool,你可以這樣做:
public class NumGeneratorThreadSafe{
List<Integer> numberPool = new ArrayList<>();
private int counter = 0;
public NumGeneratorThreadSafe() {
for(int i = 1; i <= 1000 ; i++) {
this.numberPool.add(i);
}
Collections.shuffle(this.numberPool);
}
public synchronized Integer getRandomNumber() {
return this.numberPool.get(this.counter++);
}
public synchronized void resetCounter() {
this.counter = 0;
}
}
希望這可以幫助。
編輯: 為了在線程中使用該類:
public class MultiThreadingRandom {
public static void main(String[] args) throws InterruptedException {
ExecutorService executorService = Executors.newFixedThreadPool(2);
NumGeneratorThreadSafe numGenerator = new NumGeneratorThreadSafe();
GeneRan r1 = new GeneRan(numGenerator);
GeneRan r2 = new GeneRan(numGenerator);
executorService.submit(r1);
executorService.submit(r2);
executorService.shutdown();
}
}
class GeneRan implements Runnable{
private NumGeneratorThreadSafe numGenerator;
public GeneRan(NumGeneratorThreadSafe numGenerator) {
this.numGenerator = numGenerator;
}
@Override
public void run() {
int randInt = this.numGenerator.getRandomNumber();
System.out.println(randInt);
}
}

TA貢獻(xiàn)2012條經(jīng)驗 獲得超12個贊
這個怎么樣
import java.util.Random;
import java.util.concurrent.ExecutionException;
import java.util.concurrent.ExecutorService;
import java.util.concurrent.Executors;
public class MultiThreadingRandom {
public static void main(String[] args) throws InterruptedException, ExecutionException {
ExecutorService executorService = Executors.newFixedThreadPool(2);
Generun r1 = new Generun();
executorService.submit(r1);
Thread.sleep(100);
executorService.submit(r1);
executorService.shutdown();
}
}
class Generun implements Runnable {
int nextInt = -1;
int bound = 1000;
@Override
public void run() {
int temp = nextInt;
nextInt = new Random().nextInt(bound);
if (temp == nextInt) {
do {
nextInt = new Random().nextInt(bound);
} while (temp == nextInt);
}
System.out.println(nextInt);
}
}
添加回答
舉報