Java 不同实例的多线程处理仍然产生相同的结果,如何克服这一问题? 公共类多线程域{ 公共静态void main(字符串[]args)引发InterruptedException{ MultiThreadingRandom MultiThreadingRandom=新的MultiThreadingRandom(); ExecutorService ExecutorService=Executors.newFixedThreadPool(2); geneRan r1=新geneRan(); geneRan r2=新geneRan(); 执行器服务提交(r1); 执行器服务提交(r2); executorService.shutdown(); } } 类geneRan实现可运行的{ int rand_int1=0; @凌驾 公开募捐{ //如何实现此方法 Random rand=新的Random(); rand_int1=rand.nextInt(1000); 系统输出打印LN(rand_int1); //System.out.println(ai.getAndIncrement()); } }
这个程序有时给出两个不同的输出,但有时给出相同的输出 实际上,我在这两个线程中使用了两个不同的对象,所以为什么在某些情况下它会给出相同的结果Java 不同实例的多线程处理仍然产生相同的结果,如何克服这一问题? 公共类多线程域{ 公共静态void main(字符串[]args)引发InterruptedException{ MultiThreadingRandom MultiThreadingRandom=新的MultiThreadingRandom(); ExecutorService ExecutorService=Executors.newFixedThreadPool(2); geneRan r1=新geneRan(); geneRan r2=新geneRan(); 执行器服务提交(r1); 执行器服务提交(r2); executorService.shutdown(); } } 类geneRan实现可运行的{ int rand_int1=0; @凌驾 公开募捐{ //如何实现此方法 Random rand=新的Random(); rand_int1=rand.nextInt(1000); 系统输出打印LN(rand_int1); //System.out.println(ai.getAndIncrement()); } },java,Java,这个程序有时给出两个不同的输出,但有时给出相同的输出 实际上,我在这两个线程中使用了两个不同的对象,所以为什么在某些情况下它会给出相同的结果 无论如何,我只传递了两个不同的对象的线程安全代码。那么我如何保证在任何情况下生成2个不同的随机数。如前所述,这与多线程无关。因为这些数字是随机的,所以它们也有可能是相同的 如果你想要两个不同的随机数,你可以这样做: //创建整数列表 List numberPool=new ArrayList(); //使用1到1000之间的数字初始化列表 对于(int n
无论如何,我只传递了两个不同的对象的线程安全代码。那么我如何保证在任何情况下生成2个不同的随机数。如前所述,这与多线程无关。因为这些数字是随机的,所以它们也有可能是相同的 如果你想要两个不同的随机数,你可以这样做:
//创建整数列表
List numberPool=new ArrayList();
//使用1到1000之间的数字初始化列表
对于(int num=1;num
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);
}
}
它们是随机的,所以它们会随机打印出相同的值。与多线程无关。是的,Thread.sleep在这种情况下有效,但我希望两个线程同时运行。但由于它们是不同的对象,所以应该保证不同的结果。但在本例中,我使用了random,但假设它的序列来自DB。我不想要s任何运行的顺序都应该相同。这最终会导致IndexOutOfBoundsException
崩溃,但修复这一问题可能会留给读者作为练习。@Haem,是的,当然,只是想展示一下一般的想法。如果您想要从1到1000的唯一随机数,则不应调用getRandomNumber()
超过1000次。